Laravel5.1学習ノート6応答
10931 ワード
#基本応答
ルートから文字列を返す
最も基本的な応答は、Laravelのルーティングから文字列を返すことです.
Route::get('/', function()
{
return 'Hello World';
});
カスタムレスポンスの作成
しかし、ほとんどのルーティングおよびコントローラが実行する動作では、完全な
Illuminate\Http\Response
インスタンスまたは表示を返す必要があります.完全なResponse
インスタンスを返すと、応答のHTTPステータスコードと応答ヘッダをカスタマイズできます.Response
の例はSymfony\Component\HttpFoundation\Response
クラスを継承し、HTTP応答を確立するための多くの方法を提供する.use Illuminate\Http\Response;
Route::get('home', function () {
return (new Response($content, $status))
->header('Content-Type', $value);
});
便宜上、補助方法
response
を使用することができます.Route::get('home', function () {
return response($content, $status)
->header('Content-Type', $value);
});
ヒント:
Response
メソッドに関する完全なリストは、APIドキュメントおよびSymfony APIドキュメントを参照することができる.#応答にヘッダ情報を追加
多くの応答メソッドがチェーン呼び出しであることを覚えておいて、スムーズな応答を確立します.次のようになります.
return response($content)
->header('Content-Type', $type)
->header('X-Header-One', 'Header Value')
->header('X-Header-Two', 'Header Value');
♪Cookieを応答に添付(ここではくだらない話を省いて、コードを直接見て理解しても、幽霊のドキュメントがこんなに多いくだらない話を理解していません)
return response($content)->header('Content-Type', $type)
->withCookie('name', 'value');
withCookieメソッドは、Cookieのプロパティをカスタマイズできるように、より多くのオプションの引数を受け入れます.
->withCookie($name, $value, $minutes, $path, $domain, $secure, $httpOnly)
デフォルトのすべてのcookiesはLaravelで暗号化され、署名されています.これにより、お客様が勝手に変更することはできません.一部のCookiesを暗号化したくない場合は、
App\Http\Middleware\EncryptCookies
ミドルウェアの$exceptプロパティを使用できます./**
* The names of the cookies that should not be encrypted.
*
* @var array
*/
protected $except = [
'cookie_name',
];
#その他の応答タイプ
補助方法
response
を使用すると、他のタイプの応答インスタンスを容易に生成することができる.補助メソッドresponse
を呼び出し、パラメータを持たない場合、Illuminate\Contracts\Routing\ResponseFactory
Contractのインプリメンテーションが返されます.このContractは応答を生成するためのいくつかの有用な方法を提供する.Viewレスポンス
応答状態と応答ヘッダを制御する必要がある場合、応答内容としてviewを返す必要がある場合は、viewメソッドを使用します.
return response()->view('hello', $data)->header('Content-Type', $type);
カスタムHTTPステータスを転送したり、ヘッダ情報をカスタマイズしたりする必要がない場合は、グローバルViewアシストメソッドを使用します.
JSON応答の確立
json
メソッドは、応答ヘッダのContent-Type
をapplication/json,
に自動的に構成し、所定のarray配列をJSONに同時に変換し、json_Encode PHPメソッドreturn response()->json(['name' => 'Abigail', 'state' => 'CA']);
JSONP応答の確立
return response()->json(['name' => 'Abigail', 'state' => 'CA'])
->setCallback($request->input('callback'));
ファイルダウンロードの応答の確立
1番目のパラメータは指定されたダウンロードディレクトリで、2番目は保存されたファイル名で、3番目はHTTPヘッダ情報です.
return response()->download($pathToFile);
return response()->download($pathToFile, $name, $headers);
return response()->download($pathToFile)->deleteFileAfterSend(true);
Note: Symfony HttpFoundation, which manages file downloads, requires the file being downloaded to have an ASCII file name.
#リダイレクト
リダイレクト応答は、通常、クラス
Illuminate\Http\RedirectResponse
の例であり、ユーザが別のURLにリダイレクトするために必要な応答ヘッダを含む.リダイレクトRedirectResponseインスタンスを生成する方法はいくつかありますが、最も簡単な方法はグローバルredirectアシストメソッドを使用することです.Route::get('dashboard', function () {
return redirect('home/dashboard');
});
フォームのコミットに失敗したなど、ユーザーを前の場所にリダイレクトしたい場合は、グローバルに使用できます.backアシストメソッド
Route::post('user/profile', function () {
// Validate the request...
return back()->withInput();
});
リダイレクトに戻る
RedirectResponse
の例を生成するいくつかの方法があり、最も簡単な方法は補助方法redirect
を透過することである.テスト時に、シミュレーションリダイレクト応答を確立するテストは一般的ではないので、補助方法を使用することは通常可能です.return redirect('user/login');
ルーティング名によるリダイレクトを返します
補助メソッド
redirect
を呼び出し、パラメータを持たない場合、Illuminate\Routing\Redirector
のインスタンスが返され、そのインスタンスに対して任意のメソッドを呼び出すことができます.たとえば、RedirectResponse
からルーティング名を生成するには、route
メソッドを使用します.return redirect()->route('login');
ルーティングにパラメータがある場合は、2番目の引数として渡すことができます.
义齿
// For a route with the following URI: profile/{id}
return redirect()->route('profile', [1]);
IDパラメータがEloquentモデルに含まれるルーティングにリダイレクトする場合は、Model自体を渡すことができ、IDが自動的に抽出されます.
return redirect()->route('profile', [$user]);
コントローラの動作によるリダイレクトを返します
RedirectResponse
のインスタンスを生成し、ルーティング名にリダイレクトできる以上、コントローラアクションにリダイレクトすることもできる.return redirect()->action('App\Http\Controllers\HomeController@index');
ヒント:
URL::setRootControllerNamespace
でルートコントローラのネーミングスペースを登録した場合は、action()
メソッド内のコントローラに完全なネーミングスペースを指定する必要はありません.action()
メソッド内のコントローラは、完全なネーミングスペースを指定します.action()
メソッド内のコントローラは、完全なネーミングスペースを指定します.コントローラの動作に従ったリダイレクトを返し、パラメータに値を割り当てます.
return redirect()->action('UserController@profile', [1]);
コントローラの動作に従ったリダイレクトを返し、特定の名前パラメータに値を割り当てます.
return redirect()->action('App\Http\Controllers\UserController@profile', ['user' => 1]);
リダイレクトを返し、フラッシュデータ(Flash Data)を追加
通常、新しいURLにリダイレクトするとデータを一度に保存になります.便宜上、メソッド接続を使用して
RedirectResponse
のインスタンスを作成し、データを使い捨てSessionに保存することができます.Route::post('user/profile', function () {
// Update the user's profile...
return redirect('dashboard')->with('status', 'Profile updated!');
});