Laravel 5が初めてで、新しいフォームリクエストを使用して、アプリケーション内のすべてのフォームを検証しようとしています。
リソースを削除する必要があり、authorizeメソッドを使用するためだけにDeleteResourceRequestを作成する必要があります。
問題は、ルートパラメーターで要求されているIDを見つける必要があるが、authorizeメソッドでそれを取得する方法がわからないことです。
次のようにコントローラーメソッドでIDを使用できます:
public function destroy($id, DeletePivotRequest $request)
{
Resource::findOrFail($id);
}
しかし、フォームリクエストの認証メソッドでこれを機能させる方法は?
これは非常に簡単で、route()
メソッドを使用するだけです。ルートパラメータがid
と呼ばれると仮定します:
public function authorize(){
$id = $this->route('id');
}
Illuminate\Http\Requestインスタンス経由でルートパラメーター値にアクセスできます。
public function destroy($id, DeletePivotRequest $request)
{
if ($request->route('id'))
{
//
}
Resource::findOrFail($id);
}
Laravel 5.2、コントローラー内から:
_use Route;
...
Route::current()->getParameter('id');
_
複数のURLパラメータを持つ複数のルートに同じコントローラメソッドを使用したい場合、これは便利です。おそらくすべてのパラメータが常に存在するとは限らず、異なる順序で表示される可能性があります...
つまり、getParameter('id')
は、URL内の_{id}
_の位置に関係なく、正しい答えを提供します。
Laravel Docs:現在のルートへのアクセス を参照してください
私は答えを探してここに来て、コメントでそれを見つけたので、フォームリクエストでこれを使用しようとしているリソースルートを使用して他の人に明確にしたかった
lukasのコメントで言及されているように、リソースコントローラーRoute::resource('post', ...)
を指定すると、使用できるパラメーターの名前はpost
になります。
これは私には便利でしたが、完全ではありませんでした。パラメータは、リソーススタブの最後の部分の単一バージョンになるようです。
私の場合、ルートは$router->resource('inventory/manufacturers', 'API\Inventory\ManufacturersController');
として定義されました
使用可能なパラメーターはmanufacturer
(スタブの最後の部分の単数形inventory/manufacturers
)