Laravel 5.4 - 使用View Composer中从Controller实例化的模型

时间:2017-06-26 15:42:09

标签: php laravel laravel-5

因此,假设我有一个单个项目的视图,在该视图中,我有一个在模型中打开的表单(使用组件)。为了使该模型组件出现,我需要该项目的实例。例如,

web.php

中的路线
Route::get('/projects/{project}', 'ProjectController@show');

我的项目控制器

/* ProjectController show() method */
public function show(Project $project)
{
  return view('projects.show', compact('project'));
}

在该项目的show blade模板中,我有以下组件将供应商添加到项目中。如您所见,我需要将项目实例传递给该组件。

@component('layouts.modals.add-project-vendor', ['project' => $project])

@endcomponent

我知道您可以使用视图编辑器将数据附加到组件,视图等。我在整个项目中使用视图作曲家,但我正在作曲家中收集数据。我希望能够做的只是使用该项目的实例,甚至不必将项目实际传递给组件。例如。

View::composer(
   ['layouts.modals.add-project-vendor'],
   function($view){
    /* 
     * Somehow get that instance of the project 
     * that is already instantiated on the show page. And
     * send it to the component.      
     */
     $project = ; 
     $view->with(compact('project'));
   }
 );

因此,期望的结果只能在单个项目视图上调用以下内容,并在每次调用时将该实例化类传递给此组件。例如:

@component('layouts.modals.add-project-vendor')

@endcomponent

1 个答案:

答案 0 :(得分:1)

Laravel的视图实现ArrayAccess并允许通过它访问传递的变量。

在您的情况下,您可以使用:

$project = $view["project"];

这将访问传递给视图的名称为“project”的任何参数。

作为旁注,您可以使用$view->getData()获取作为关联数组传递的所有变量,以备不时之需。