我有一个我想在所有控制器方法中返回的数据,我认为从控制器的构造函数中返回该数据会更干净;因为目前这只是重复的返回码。
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
]);
}
这只是一个伪示例。
答案 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,但是,该中间件将在应用程序处理请求后执行其任务