【问题标题】:How to pass variables to another controller in Laravel如何将变量传递给 Laravel 中的另一个控制器
【发布时间】:2013-03-23 12:06:35
【问题描述】:

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

【问题讨论】:

    标签: php laravel hmvc laravel-3


    【解决方案1】:

    设法让它按我想要的方式工作。对于其他感兴趣的人:

    而不是使用

    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 上的友好人士提供帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多