【问题标题】:How to send data from different controllers/actions to the same view?如何将数据从不同的控制器/动作发送到同一个视图?
【发布时间】:2015-01-03 19:00:14
【问题描述】:

这是我第一次使用 Laravel,到目前为止,我在将数据传递给视图时遇到了一些困难。我的应用程序是一个单页网站,顶部有一个菜单列出所有产品类别,下面是每个项目或产品的缩略图网格。访问者可以按他们选择的类别过滤产品。

Route::get('home/{category}', array('as'=>'itemshome', 'uses'=>'ItemsController@index'));

所以在我的 ItemsControllers 中,我从项目模型中获取一些项目并将它们传递给视图。

class ItemsController extends \BaseController {


public function index($category)
{
    return View::make('home/index', ['items' => Item::where('publishtime', '<', 
 date('Y-m-d H:i:s'))->where('category_id','=',$category)->paginate(24)]);

}

此时,我不确定是否应该使用 ItemsController 将 Category 模型中的数据发送到主视图,或者定义一个新的 CategoryController 并从那里传递值是否是一种更好的方法。

【问题讨论】:

    标签: laravel routes controllers


    【解决方案1】:

    您不能在同一个请求期间只使用另一个控制器将数据发送到同一个视图。

    要么将其添加到视图中进行调用:

    return View::make('home/index', [
        'items' => Item::where('publishtime', '<', date('Y-m-d H:i:s'))->where('category_id','=',$category)->paginate(24),
        'categories' => Category::all()
    ];
    

    或者,如果类别数据实际上与项目控制器无关,但视图需要,您可以注册一个view composer

    View::composer('home/index', function($view){
        $view->with('categories', Category::all());
    });
    

    现在每次渲染home/index 视图时,都会注入categories

    您实际上可以将视图编辑器放置在您想要的任何位置。不过,我建议您添加一个新文件 app/composers.php 来存储您的所有视图作曲家。然后你需要将它包含在某个地方。例如底部的app/start/global.php

    require app_path().'/composers.php';
    

    【讨论】:

    • 第一个建议很有效,谢谢!只是想知道我必须将视图编写器代码放在哪里。
    • 我更新了答案,详细说明了视图作曲家的放置位置
    猜你喜欢
    • 1970-01-01
    • 2017-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-13
    • 2012-06-21
    • 2023-03-23
    相关资源
    最近更新 更多