请问如何将数据从 show 方法共享到两个不同的视图

Posted

技术标签:

【中文标题】请问如何将数据从 show 方法共享到两个不同的视图【英文标题】:Please how do I share data from show method to two different views 【发布时间】:2020-11-05 08:22:37 【问题描述】:

我需要知道是否有一种方法可以将数据从一个控制器方法共享到多个视图,

这是 CategoryController 的显示方法

/**
 * Display the specified resource.
 *
 * @param  int  $id
 * @return \Illuminate\Http\Response
 */
public function show($id)

    $category = Category::find($id);

    $users = $category->user;
  
    return view('categories.show')->with('users', $users);

我想要的是在不创建另一个控制器的情况下与另一个页面 profile-display.blade.php 共享相同的数据。

【问题讨论】:

是否要根据条件返回不同的视图? 【参考方案1】:

@Adam 这会对你有所帮助。

route.php

Route::get('users/id', 'CategoryController@show')->name('profile');

Route::get('Category/id', 'CategoryController@show')->name('category');

CategoryController.php

public

function show($request, $id) 
    $category = Category::find($id);

    $users = $category->user;
    if ($request::route()->getName() == 'category') 
        return view('categories.show')->with('users', $users);
     else 
        return view('profile.show')->with('users', $users);
    

【讨论】:

谢谢@Qamar Rafhan,但是当我运行代码时,我在 view('profile.show')->with('users', $users); 上得到了一个空的数据集合; 您需要在类别模型中定义与用户的类别关系,并确保记录存在于数据库中【参考方案2】:

不同的路由可以使用同一个控制器,但是你将很难让一个控制器呈现多个视图而没有混乱的条件,或者至少只是制作一个新的控制器/方法。

不过,您可以通过使用带有路由的模型绑定来削减您的一些代码以实现更精简的方法:

routes.php

Route::get('categories/category', 'CategoryController@show');

然后在CategoryController.php:

public function show(Category $category)
  
    return view('categories.show')->with('users', $category->user);

这将使模型绑定能够在模型存在时自动实例化模型,如果不存在则返回 404。

您可以重复该过程以获得第二个视图,但只需重复使用相同的控制器(我个人根本不喜欢)。只需在同一个控制器中添加路由和新方法即可:

routes.php

Route::get('categories/category', 'CategoryController@show');
Route::get('profile-display', 'CategoryController@profileDisplay');

然后在CategoryController.php:

public function show(Category $category)
  
    return view('categories.show')->with('users', $category->user);


public function profileDisplay()
  
    return view('profile-display');


我没有向profileDisplay方法添加任何模型绑定,因为我无法真正理解您希望如何将类别附加到配置文件显示页面(顾名思义),但这可能会给您一些粗略的想法。

【讨论】:

【参考方案3】:

你可以使用\Illuminate\Support\Facades\View::share('foo', 'bar');

【讨论】:

以上是关于请问如何将数据从 show 方法共享到两个不同的视图的主要内容,如果未能解决你的问题,请参考以下文章

如何在两个 iOS 应用之间共享应用内购买数据?

如何将两个光照贴图添加到共享相同材质的两个不同对象

如何从两个不同的中继连接中删除共享节点?

如何将数据从一个视图共享到另一个视图?

我们如何在两个不同的服务之间共享数据

从两个应用程序访问共享数据