2017-06-26 16 views
0

単一のプロジェクトのビューがあり、そのビューにモデルで開くフォーム(コンポーネントを使用)があるとしましょう。そのモデルコンポーネントを表示するには、そのプロジェクトのインスタンスが必要です。だから、そのプロジェクトのための私のショーブレードテンプレートでweb.phpLaravel 5.4 - View ComposerでControllerからインスタンス化されたモデルを使用する

Route::get('/projects/{project}', '[email protected]'); 

マイプロジェクトコントローラー

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

の例

ルートのために、私はプロジェクトにベンダーを追加するには、次のコンポーネントがあります。ご覧のとおり、プロジェクトのインスタンスをそのコンポーネントに渡す必要があります。

@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')); 
    } 
); 

ので、望ましい結果が1つだけのプロジェクトビューで次のように呼び出してインスタンス化されるクラスは、このコンポーネントにそれが呼び出されるたびに合格したことを持っていることができるでしょう。たとえば、ちょうど:

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

@endcomponent 
+0

'$ project = $ view [" project "];' ...おそらく – apokryfos

+0

@apokryfos ding ding ding!シンプルで素晴らしい作品です! TYSM!これを回答として追加してください。 –

答えて

1

LaravelのビューがArrayAccessを実装し、その経由で渡された変数へのアクセスを許可しません。あなたが使用することができますあなたの場合は

$project = $view["project"]; 

これは、ビューに渡された名前を「プロジェクト」で任意のパラメータにアクセスします。

サイドノートとして、必要に応じて$view->getData()を使用して、連想配列として渡したすべての変数を取得できます。

+0

データがビューコンポーザーに変更されているため、ブレードテンプレートをクリーンアップするために、ただ一つの行 '@include( 'layouts.modals.add-project-vendor')' –

関連する問題