私は単純な API を作成しており、この API の上に単純な Web アプリケーションを構築しています。
私は直接「自分の API を消費」したいので、最初に Google で調べて、最初の質問に完全に答える StackOverflow でこの回答を見つけました: Consuming my own Laravel API
これでうまくいきました。次のようにして API にアクセスできます。
$request = Request::create('/api/cars/'.$id, 'GET');
$instance = json_decode(Route::dispatch($request)->getContent());
これは素晴らしい!ただし、私の API では、GET クエリ文字列にオプションのfieldsパラメータを追加して、次のように返される特定の属性を指定することもできます。
http://cars.com/api/cars/1?fields=id,color
APIでこれを実際に処理する方法は、次のようなものです。
public function show(Car $car)
{
if(Input::has('fields'))
{
//Here I do some logic and basically return only fields requested
....
...
}
以前にクエリ文字列パラメーターを使用しないアプローチで行ったのと同様のことができると思います。次のようなものです。
$request = Request::create('/api/cars/' . $id . '?fields=id,color', 'GET');
$instance = json_decode(Route::dispatch($request)->getContent());
しかし、そうではないようです。簡単に言えば、コードをステップ実行した後、オブジェクトが正しく作成されたように見え (そして、 fieldsパラメーターをRequest
正しく引き出してid,colorを割り当てたようです)、Route は正常にディスパッチされたように見えますが、API コントローラー自体の中でフィールドパラメータへのアクセス方法がわかりません。Using (これは私が「通常の」リクエストに使用するものです) は何も返しません。これは、静的が最初のリクエストを参照またはスコープしているためであり、「手動で」内部からディスパッチした新しいリクエストではないためです。アプリ自体。Input::get('fields')
Input
だから、私の質問は本当にどうすればいいですか?私は何か間違ったことをしていますか?理想的には、API コントローラーで醜いことや特別なことをするのを避けたいです。内部でディスパッチされたリクエストに Input::get を使用でき、2 回目のチェックを行う必要がないようにしたいなどです。