1

私はいくつかのLaravelコントローラーメソッドを研究しています。一部のコントローラー メソッドにはいくつかのパラメーターがありますが、それらはルート パラメーターからのものではありません。例えば、

public function store(Request $request)
{
    $this->validate($request, [
        'title' => 'required|unique|max:255',
        'body' => 'required',
    ]);
}

Laravelコントローラーメソッドはどのようにパラメーターを取得しますか? パラメータを提供したのは誰$requestですか? Laravelはルートパラメータとこのタイプのパラメータをどのように区別していますか?

4

2 に答える 2

2

表示されるものは、依存性注入と呼ばれます。Laravel はメソッドを呼び出す前に、PHP のリフレクション機能store()を使用してそのシグネチャを分析し、IoC コンテナーを介してクラスのタイプヒントを示すすべてのパラメーターを解決します。これにより、現在のリクエストが自動的に挿入されます。

これらのパラメーターが解決された後、ルート パラメーターが渡されます。型ヒント付きの引数は最初に解決されるため、それらが引数リストの最初、中間、または最後にあるかどうかは実際には問題ではありません。重要な唯一のケースは、オプションのルート パラメーターを使用する場合です。

動作しません:

public function store($foo = 'bar', Request $request){

作品:

public function store(Request $request, $foo = 'bar'){
于 2015-04-25T06:56:58.743 に答える
1

これらは、Laraval IoC (制御コンテナーの反転など) によって注入され、メソッド注入と呼ばれます。これは、Laravel を素晴らしいものにしている理由の 1 つです。

変数をタイプヒントすると、コンテキストに応じて Laravel が変数を作成します。

http://laravel.com/docs/5.0/container#introductionからの詳細情報

于 2015-04-25T06:55:43.847 に答える