あるコントローラーでデータを処理していますが、コードを重複させないために、さらに別のコントローラーに渡したいと思います。
他のコントローラーのstore
- methodで必要なRequestオブジェクトをセットアップする方法はありますか? Requestの継承をたどり、実際にrequest
であるParameterBag
プロパティを持つSymfonyのRequestオブジェクトに到達しました。このプロパティは、値を持つパラメーターを追加するadd
を保持します。
私は次のことを試しましたが、結果としてnull
を得ています:
$myRequest = new Request();
$myRequest->request->add(['foo' => 'bar']);
var_dump($myRequest->foo);
私はLaravel 5.1このプロジェクトで。
replace()
を使用できます:
$request = new \Illuminate\Http\Request();
$request->replace(['foo' => 'bar']);
dd($request->foo);
または、2番目のコントローラーで行われていることに対してJob
を作成し、ShouldQueue
インターフェイスを削除して同期的に実行する方が合理的です。
お役に立てれば!
$myRequest = new Request();
を使用して要求オブジェクトを作成すると、_method = 'GET'
_を使用してオブジェクトが作成されます。 $myRequest->getMethod()
でリクエストのメソッドを確認できます。 request
プロパティはPOSTリクエストのデータを保持するため、デフォルトで$myRequest->request->add()
を使用することはできません。最初にリクエストのメソッドをPOSTに設定する必要があります。
_$myRequest = new \Illuminate\Http\Request();
$myRequest->setMethod('POST');
$myRequest->request->add(['foo' => 'bar']);
dd($request->foo);
_
$myRequest->query->add()
を使用して、GETリクエストにデータを追加できます。
「コードの重複を避ける」ためには、共通の機能を専用のクラスに抽象化し、適切なニーモニック名を付け、ユニットテストのセットを記述し、コントローラーをユニットテストするときにコントローラーでモックする必要があります。
それでもリクエストを行う必要がある場合:
use Illuminate\Http\Request;
$request = new Request([
'name' => 'unit test',
'number' => 123,
]);
リクエストのすべての機能が必要な場合は、いくつかの行を追加する必要があります
$request
->setContainer(app())
->setRedirector(app(\Illuminate\Routing\Redirector::class))
->validateResolved();
これらのメソッドを使用して、リクエストパラメータをその場で追加できます。
あなたがコントローラにいる場合、次のような関数のパラメータでリクエストオブジェクトを渡します
function createUser(Illuminate\Http\Request $request){
$request->replace(array_merge(array("new_key1"=>"new_value1","new_key_n"=>"new_value_n"), $request->all()));
}
function createUser(Illuminate\Http\Request $request){
$request->merge(array("new_key1"=>"new_value1","new_key_n"=>"new_value_n"));
}
function createUser(Illuminate\Http\Request $request){
$request->request->add(array_merge(array("new_key1"=>"new_value1","new_key_n"=>"new_value_n"), $request->all()));
}
注::すべての機能で、リクエストを拡張しています。つまり、以前のパラメーターがそこに残ることを意味します。独自のものを追加します。それらをすべて置き換えることができます。