是否可以添加数据以从控制器构造函数查看数据

时间:2018-09-26 14:10:16

标签: php laravel laravel-5 constructor

我有一个我想在所有控制器方法中返回的数据,我认为从控制器的构造函数中返回该数据会更干净;因为目前这只是重复的返回码。

protected $data;

public function __construct() {
   $this->data = "Test";
}

public function index() {
   // Stuff

   return view('test')->with([
       'testData' => $this->data
        // other view data
   ]);
}

public function store() {
   // Stuff

   return redirect()->back()->with([
       'testData' => $this->data
        // other view data
   ]);
}

这只是一个伪示例。

5 个答案:

答案 0 :(得分:1)

是的,那是可能的。完全按照您显示的方式完成。

但是,我认为这不是最好的方法。您可能想看一下ViewComposers,它有助于在控制器之后但最终将视图提供给用户之前为视图(或多个视图)提供数据集。

答案 1 :(得分:1)

您只需编写一个控制器方法即可为您添加data属性:

protected function view($name, $data = []) 
{
    return view($name, $data + $this->data);
}

public function index() {
    ...
    return $this->view('view', ['other' => 'data']);
}

答案 2 :(得分:1)

您可以使用ViewComposer来允许您在每次渲染某些视图时将数据附加到视图中

namespace App\ViewComposers;
class DataComposer
{

    protected $data = ['1', '2', '3']; // This data is just for sample purpose

    public function compose(View $view)
    {
        $view->with('data', $this->data);
    }
}

要在所有必须附加数据的视图的列表中注册此作曲家,请在boot的{​​{1}}方法中将此代码添加到AppServiceProvider

View::composer(
    ['view1', 'view2', 'view3', '....'],
    'App\ViewComposers\DataComposer'
);

答案 3 :(得分:0)

是的,您拥有的代码很有可能

[编辑] 如果要从所有控制器方法中删除['testData' => $this->data],则可以使用view composers

视图编辑器已链接到one view。因此,对于该视图,如果您始终要传递相同的数据集,请使用视图编辑器!

答案 4 :(得分:0)

创建一个after middleware,但是,该中间件将在应用程序处理请求后执行其任务