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

Php 是否可以添加数据以查看控制器构造函数中的数据,php,laravel,laravel-5,constructor,Php,Laravel,Laravel 5,Constructor,我有一个数据,我想在我所有的控制器方法中返回,我认为从控制器的构造函数返回会更干净;因为目前它只是重复的返回代码 protected $data; public function __construct() { $this->data = "Test"; } public function index() { // Stuff return view('test')->with([ 'testData' => $this->data

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

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
   ]);
}

这只是一个伪示例。

是的,您所拥有的代码很有可能实现这一点

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


视图生成器链接到一个视图。因此,对于该视图,如果始终要传递相同的数据集,请使用视图生成器

是的,使用您的代码很有可能做到这一点

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


视图生成器链接到一个视图。因此,对于该视图,如果始终要传递相同的数据集,请使用视图生成器

创建a然而,该中间件将在应用程序处理请求后执行其任务

创建a然而,该中间件将在应用程序处理请求后执行其任务

是的,这是可能的。完全按照你展示的方式来做


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

是的,这是可能的。完全按照你展示的方式来做


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

您可以编写一个控制器方法来为您附加数据属性:

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

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

您可以编写一个控制器方法来为您附加数据属性:

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

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

您可以使用
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);
    }
}
要使用必须附加数据的所有视图列表注册此编写器,请在
AppServiceProvider的
boot
方法中添加此代码

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

您可以使用
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);
    }
}
要使用必须附加数据的所有视图列表注册此编写器,请在
AppServiceProvider的
boot
方法中添加此代码

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

是的,但我要求从所有控制器方法中删除
'testData'=>$this->data
部分,并仅将其保留在构造函数中。哦,是的,您可以对全局应用程序范围的视图使用Are Not ViewComposer?是否可以仅将其用于一个控制器或几个控制器,而不是所有控制器?视图生成器链接到一个视图。因此,对于该视图,如果您始终要传递相同的数据集,请使用view Composer,但我要求从所有控制器方法中删除
'testData'=>$this->data
部分,并仅将其保留在构造函数中。哦,是的,您可以将Are Not ViewComposer用于全局应用程序范围的视图?是否可以仅将其用于一个控制器或几个控制器,而不是所有控制器?视图生成器链接到一个视图。因此,对于该视图,如果始终要传递相同的数据集,请使用view Composer我知道ViewComposer-但对于本例,我不想将数据返回到应用程序中的所有视图;我只想在几个控制器中执行此操作-因此我不必在我拥有的每个控制器中编写
testData'=>this->data
。是否可以使用ViewComposer实现此功能,或者它适用于所有视图?ViewComposer确实允许您将其返回到所有视图,但您必须指定每个视图都依赖于所述composer。您想要的似乎更面向所有视图都可以访问的对象,因此最好在
AppServiceProvider
中添加一个共享变量。在
boot
方法中,您可以使用
view->share('var\u name','value')
。这可以在任何视图中使用。请注意将其命名为足够具体的名称,这样它就不会失败,尽管我知道ViewComposer,但在本例中,我不想将数据返回到应用程序中的所有视图;我只想在几个控制器中执行此操作-因此我不必在我拥有的每个控制器中编写
testData'=>this->data
。是否可以使用ViewComposer实现此功能,或者它适用于所有视图?ViewComposer确实允许您将其返回到所有视图,但您必须指定每个视图都依赖于所述composer。您想要的似乎更面向所有视图都可以访问的对象,因此最好在
AppServiceProvider
中添加一个共享变量。在
boot
方法中,您可以使用
view->share('var\u name','value')
。这可以在任何视图中使用。注意将其命名为足够具体的名称,这样它就不会失败,尽管这也是一种有趣的方法,在控制器级别控制数据比在视图生成器级别更容易。这也是一种有趣的方法,在控制器级别控制数据比在视图生成器级别更容易。