我有一个产品控制器和一个标头控制器。加载产品控制器时,我使用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顺便说一句)
答案 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的友好人士道歉,以帮助解决这个问题