2

我有一个产品控制器和一个标头控制器。加载产品控制器时,我使用 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 顺便说一句)

4

1 回答 1

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上的友好人士提供帮助以帮助解决此问题

于 2013-03-23T13:08:54.240 回答