2016-05-20 16 views
1

私が取り組んでいるLaravelアプリケーションには2つのリソースがあります。第2の資源のためネストされたリソースへのリンクを生成するにはどうすればよいですか?

ルートを以下に示す。

$ php artisan route:list | grep -i activity 

POST  | admin/procedure/{id}/activity     | admin.procedure.{id}.activity.store | (...)\[email protected]  
GET|HEAD | admin/procedure/{id}/activity     | admin.procedure.{id}.activity.index | (...)\[email protected]  
GET|HEAD | admin/procedure/{id}/activity/create   | admin.procedure.{id}.activity.create | (...)\[email protected] 
GET|HEAD | admin/procedure/{id}/activity/{activity}  | admin.procedure.{id}.activity.show | (...)\[email protected]  
PUT|PATCH | admin/procedure/{id}/activity/{activity}  | admin.procedure.{id}.activity.update | (...)\[email protected] 
DELETE  | admin/procedure/{id}/activity/{activity}  | admin.procedure.{id}.activity.destroy | (...)\[email protected] 
GET|HEAD | admin/procedure/{id}/activity/{activity}/edit | admin.procedure.{id}.activity.edit | (...)\[email protected]  

活動は手続きの下で定義されているので、私は、ネストされたリソース、この設定を呼び出します。定義やルートは次のようになります。

Route::resource('procedure', 'ProcedureController'); 
Route::resource('procedure/{id}/activity', 'Admin\ProcedureActivityController'); 

私は、リスト・オール・手続きのルートと同じように手順3に属する新しい活動のためのPOSTアクションへのリンクを生成したいと思います。

$ php artisan tinker 
>>> route('admin.procedure.index') 
=> "http://localhost/admin/procedure" 

>>> route('admin.procedure.{id}.activity') 
InvalidArgumentException with message 
     'Route [admin.procedure.{id}.activity] not defined.' 

標準ヘルパーとファサードを使用してネストされたリソースへのリンクを生成する方法はありますか?

+0

FYI、https://laravel.com/docs/5.2/helpers#method-route – haakym

答えて

1

ネストされたリソースのためのあなたのルート定義はかなり右ではありません。

Route::resource('procedure/{id}/activity', 'Admin\ProcedureActivityController'); 

は次のようになります。
Route::resource('procedure.activity', 'Admin\ProcedureActivityController'); 

はまた、私はあなたがリソース名に基づいてパラメータを作成しますResourceRegistrarとしてURIに {id}を取得しているかわかりません。あなたの最初のリソース定義のために {procedure}であるはずの定義に基づいています。

インデックスルートには、admin.procedure.activity.indexのようなルート名にする必要があります。 photos/{photos}/comments/{comments}

Route::resource('photos.comments', 'PhotoCommentController');

このルートは、次のようなURLでアクセスすることができる、 "ネスト" リソースを登録します

Laravel 5.1 - Controllers - Restful - Nested Resources

route('admin.procedure.activity.index', ['procedure' => $id]);

+0

これもうまくいきます:route( 'admin.procedure.activity.show'、[10、20]) –

+0

はい、そのように渡すことができ、それらを渡す順序で配置されます:)。私は連想配列を使用してそれを明確にするという習慣があり、あまりにも多くのパラメータが渡された場合は、それらをURLにGETパラメータとして追加します。 – lagbox

+0

リソースルートの場合、Httpメソッド(GET、POST)とパラメータフォーマット(url、formdata)がルートから減算されます。 –

0

あなたはそれを動作させるためにパラメータを指定してroute()を使用する必要があります。

route('admin.procedure.{id}.activity.index', $id); 
+0

>>>ルート( 'admin.procedure {ID} .activity。'、22); メッセージ 'Route [admin.procedure。{id} .activity]が定義されていません。'のInvalidArgumentExceptionです。 –

+0

申し訳ありませんが、私はあなたから質問をコピーして貼り付けたルートに '.index'を追加するのを忘れてしまいました。更新された回答を確認してください。 –

関連する問題