如何将变量传递给Laravel中的另一个控制器

时间:2013-03-23 12:06:35

标签: php laravel hmvc laravel-3

我有一个产品控制器和一个标头控制器。加载产品控制器时,我使用Route :: forward()加载我的标题控制器。

return View::make('frontend.catalogue.product.view')
            ->with('head', Route::forward("GET", "frontend/page/head"));

然后,我可以通过执行以下操作来回显页面上的标题:

<?php echo $head; ?>

简单。但是,我想将信息传递给将在产品控制器中定义的标题控制器,例如页面标题或元描述。

理想情况下,我要么能够将数组传递给标头,要么在两个路由请求都可以访问的地方有一个实例化的类。

我已尝试在我的基本控制器构造函数中实例化一个库,但是这会在每个Route :: forward()请求中重新实例化,因此我设置的任何属性都无法在下一个转发中读取。

我能想到这样做的唯一方法是使用会话数据,但这似乎不是最好的方法。

标题确实需要是一个控制器,而不仅仅是一个视图编辑器,因为它处理它自己的模型等。

我知道Laravel不会做HMVC,这将是理想的解决方案,而且我知道HMVC有捆绑包,但我很好奇你将如何采用Laravel方式。

(使用Laravel 3.2顺便说一句)

1 个答案:

答案 0 :(得分:2)

管理以实现我想要的工作。对于其他感兴趣的人:

而不是使用

return View::make('frontend.catalogue.product.view')
             ->with('head', Route::forward("GET", "frontend/page/head"));

我现在在主请求控制器中执行以下操作:

    $document = array(
        'meta_title' => 'My Title',
        'meta_description' => 'My Description',
    );

    // Output the view
    return View::make('frontend.catalogue.category.view')
                    ->with('head', Controller::call('frontend.page.head@index', array($document)));

在我的frontend/page/head控制器中,我有以下内容:

public function action_index($document = array()) {

       $meta_title = isset($document['meta_title']) ? $document['meta_title'] : 'Default Title';

       return View::make('frontend.page.head')
                ->with('meta_title', $meta_title);

}

Laravel IRC的友好人士道歉,以帮助解决这个问题