web-dev-qa-db-ja.com

Laravel 5フォームリクエストでリクエストルートパラメーターを使用するには?

Laravel 5が初めてで、新しいフォームリクエストを使用して、アプリケーション内のすべてのフォームを検証しようとしています。

リソースを削除する必要があり、authorizeメソッドを使用するためだけにDeleteResourceRequestを作成する必要があります。

問題は、ルートパラメーターで要求されているIDを見つける必要があるが、authorizeメソッドでそれを取得する方法がわからないことです。

次のようにコントローラーメソッドでIDを使用できます:

public function destroy($id, DeletePivotRequest $request)
{
    Resource::findOrFail($id);
}

しかし、フォームリクエストの認証メソッドでこれを機能させる方法は?

33
Rohan

これは非常に簡単で、route()メソッドを使用するだけです。ルートパラメータがidと呼ばれると仮定します:

public function authorize(){
    $id = $this->route('id');
}
61
lukasgeiter

Illuminate\Http\Requestインスタンス経由でルートパラメーター値にアクセスできます。

public function destroy($id, DeletePivotRequest $request)
{
    if ($request->route('id'))
    {
        //
    }

    Resource::findOrFail($id);
}
7
Emeka Mbah

Laravel 5.2、コントローラー内から:

_use Route;

...

Route::current()->getParameter('id');
_

複数のURLパラメータを持つ複数のルートに同じコントローラメソッドを使用したい場合、これは便利です。おそらくすべてのパラメータが常に存在するとは限らず、異なる順序で表示される可能性があります...

つまり、getParameter('id')は、URL内の_{id}_の位置に関係なく、正しい答えを提供します。

Laravel Docs:現在のルートへのアクセス を参照してください

5
William Turrell

ルートでのパラメーターの定義方法に応じて。

以下の私の場合、_'user'_not_'id'_

$id = $this->route('user');

enter image description here

1
Emmanuel Opio

私は答えを探してここに来て、コメントでそれを見つけたので、フォームリクエストでこれを使用しようとしているリソースルートを使用して他の人に明確にしたかった

lukasのコメントで言及されているように、リソースコントローラーRoute::resource('post', ...)を指定すると、使用できるパラメーターの名前はpostになります。

これは私には便利でしたが、完全ではありませんでした。パラメータは、リソーススタブの最後の部分の単一バージョンになるようです。

私の場合、ルートは$router->resource('inventory/manufacturers', 'API\Inventory\ManufacturersController');として定義されました

使用可能なパラメーターはmanufacturer(スタブの最後の部分の単数形inventory/manufacturers

0
Bryan