ホームページ > バックエンド開発 > PHPチュートリアル > laravelの基本チュートリアル - 応答

laravelの基本チュートリアル - 応答

WBOY
リリース: 2016-06-23 13:07:46
オリジナル
1049 人が閲覧しました

HTTP レスポンス

基本レスポンス

すべてのルートとコントローラーはユーザーのブラウザに何らかのレスポンスを返す必要があり、laravel はレスポンスを返すためのさまざまな方法を提供します。最も基本的な応答は、単にルートまたはコントローラーで文字列を返すことです:

Route::get('/', function () {  return 'Hello World';});
ログイン後にコピー

ここで返された文字列は、laravel によって HTTP 応答に自動的に変換され、送信されます。

応答オブジェクト

ほとんどの場合、ルーティングまたはcontrol ハンドラーの動作は、IlluminateHttpResponse インスタンスまたはビューを返す必要があります。レスポンス インスタンスを使用すると、レスポンス ヘッダーとレスポンス ステータスを簡単にカスタマイズできます。 Response インスタンスは、HTTP レスポンスを生成するためのさまざまなメソッドを提供する SymfonyComponentHttpFoundationResponse クラスを継承します。

use Illuminate\Http\Response;Route::get('home', function () {  return (new Response($content, $status))                ->header('Content-Type', $value); });
ログイン後にコピー

laravel は、便利なレスポンス グローバル ヘルプも提供します。 Response インスタンスで使用できるすべてのメソッドについては、API ドキュメントと Symfony API ドキュメントを参照してください。

レスポンスヘッダーを添付する

Response インスタンスのほとんどのメソッドはチェーン呼び出しを許可しており、チェーン呼び出しを使用して構築できます。流暢に答えます。たとえば、header メソッドを使用して、ユーザー クライアントに送信される前にさまざまな応答ヘッダーを追加できます:

Route::get('home', function () {  return response($content, $status)            ->header('Content-Type', $value);});
ログイン後にコピー

または、withHeaders メソッドを使用して、配列を指定して応答にリクエスト ヘッダーを追加できます:

return response($content)         ->header('Content-Type', $type)         ->header('X-Header-One', 'Header Value')         ->header('X-Header-Two', 'Header Value');
ログイン後にコピー

Add cookiesレスポンスに

Response インスタンスの Cookie は、単純に Cookie 情報をレスポンスに追加できます。たとえば、cookie メソッドを使用して cookie を生成し、それを応答に追加できます:

return response($content)         ->withHeaders([           'Content-Type' => $type,           'X-Header-One' => 'Header Value',           'X-Header-Two' => 'Header value'         ]);
ログイン後にコピー

cookie メソッドを使用すると、パラメータを追加して cookie プロパティをさらにカスタマイズできます:

return response($content)         ->header('Content-Type', $type)         ->cookie('name', 'value');
ログイン後にコピー

デフォルトでは、laravel のすべての cookie は次のようになります。合格 ビザは暗号化されているため、クライアント ユーザーはそれを変更したり解釈したりすることはできません。そのため、特定の Cookie を生成するときにデフォルトの暗号化を無効にしたい場合は、AppHttpMiddlewareEncreyptCookies ミドルウェアの $excel 属性にそれを追加する必要があります:

->cookie($name, $value, $minutes, $path, $domain, $secure, $httpOnly)
ログイン後にコピー

Others Response type

応答ヘルパー メソッドを使用して、他のタイプの応答インスタンスを簡単に生成することもできます。パラメーターを渡さずに応答ヘルパー メソッドを使用すると、IlluminateContractsRou​​tingResponseFactory コントラクトを実装するインスタンスが返されます。コントラクトには、応答を生成するためのさまざまな便利なメソッドが用意されています。

応答の表示

応答ヘッダーと応答のステータスを制御し、応答のコンテンツとしてビューを返す必要がある場合は、次のようにすることができます。 view メソッドを使用します:

protected $except = [  'cookie_name'];
ログイン後にコピー

もちろん、応答ステータスや応答ヘッダーをカスタマイズする必要がない場合は、グローバル ヘルプ メソッド ビューを直接使用できます。

JSON レスポンス

json メソッドは、レスポンス ヘッダーの Content-Type を application/json に自動的に設定し、json_encode メソッドを使用して、提供された配列を JSON:

return response()         ->view('hello', $data)         ->header('Content-Type', $type);
ログイン後にコピー
に変換します

jsonp レスポンスを生成したい場合は、次に、json メソッドを使用して、setCallback メソッドを追加します。

return response()->json(['name' => 'Abigail', 'state' => 'CA']);
ログイン後にコピー

ファイル ダウンロード

download メソッドは、クライアント ブラウザに指定されたパスのファイルを強制的にダウンロードする応答を返すことができます。ダウンロード メソッドでは、ブラウザがダウンロードするときに 2 番目のパラメータをファイル名として渡すこともできます。また、http 応答ヘッダー配列を 3 番目のパラメータとして渡すこともできます。ファイル名

ファイル応答

file メソッドを使用すると、画像または PDF タイプのファイルを直接ダウンロードするのではなく、ブラウザーで直接表示できます。このメソッドは、最初のパラメーターとしてファイル パスを受け取り、2 番目のパラメーターとして HTTP 応答ヘッダー配列も受け取ることができます:

return response()         ->json(['name' => 'Abigail', 'state' => 'CA'])         ->setCallback($request->input('callback'));
ログイン後にコピー

Redirect

リダイレクト応答は、指定された URI へのすべてのリダイレクトを含む IlluminateHttpRedirectResponse クラスのインスタンスです。必要な応答ヘッダー情報。 Laravel には、リダイレクト インスタンスを生成する複数の方法が用意されています。最も簡単な方法は、グローバル ヘルパー メソッド redirect:

return response()->download($pathToFile);return response()->download($pathToFile, $name, $headers);
ログイン後にコピー
を使用することです。場合によっては、ユーザーを最後のリクエストのアドレスにリダイレクトする必要がある場合は、グローバル ヘルパー メソッド back を使用できます。ここではセッションが使用されているため、ルーティングがセッションミドルウェアを使用していることを確認する必要があります。デフォルトのlaravelルーティングはWebルーティンググループにラップされており、Webミドルウェアグループにはすでにセッションミドルウェアが含まれています:

return response()->file($pathToFile);return response()->file($pathToFile, $headers);
ログイン後にコピー

名前付きルートにダイレクトを繰り返します

Whenパラメータを渡さずにリダイレクトメソッドを使用すると、laravel は IlluminatedRoutingRedirector のインスタンスを返します。これにより、いくつかのメソッドを使用してリダイレクト情報を処理できるようになります。たとえば、名前付きルートへのリダイレクトを生成するには、ルートを使用できます。メソッド:

Route::get('dashboard', function () {  return redirect('home/dashboard'); });
ログイン後にコピー

名前付きルートにパラメーターも含まれている場合は、2 番目のパラメーターをルート メソッドに渡すことができます:

Route::post('user/profile', function () {  // Validate the request...  return  back()->withInput();});
ログイン後にコピー

リダイレクトする必要があるルートが、Eloquent モデルの ID をパラメーターとして使用して識別されたルートである場合、ユーザー インスタンスをルート メソッドで直接渡すと、次の ID に自動的に解決されます:

return redirect()->route('profile', [$user]);
ログイン後にコピー

重定向至控制器行为

你也可以生成重定向信息到控制器的某个行为.你可以简单的通过action方法传递控制器名称和控制器行为来做到这些.你应该注意,你并不需要特别的指出控制器的全部命名空间,因为laravel的RouteServiceProvider已经自动的设置了默认的命名空间:

return redirect()->action('HomeController@index');
ログイン後にコピー

当然,如果你的控制器行为也接收其他的参数,你同样可以在action方法中传递第二个参数:

return redirect()->action('UserController@profile', ['id' => 1]);
ログイン後にコピー

重定向并闪存session

你可以通过RedirectResponse实例的链式调用来做到在生成重定向信息的同时闪存seession数据,这在执行行为之后存储消息状态的场景尤其有用:

Route::post('user/profile', function () {  // Update the user's profile...  return redirect('dashboard')->with('status', 'profile updated'); });
ログイン後にコピー

当然,在用户重定向到新页面时,你是可以访问到闪存的会话信息的,例如,在blade模板中,你可以这么使用:

@if (session('status'))   <div class="alert alert-success">    {{ session('status')}}  </div>@endif
ログイン後にコピー

响应宏

如果你想自定义某种可复用的响应,你可以使用Response facade的 macro方法或者提供Illuminate\Contracts\Routing\ResponseFactory的一个实现:

<?phpnamespace App\Providers;use Response;use Illuminate\Support\ServiceProvider;class ResponseMacroServiceProvider extends ServiceProvider {  public function boot() {    Response::macro('caps', function ($value) {      return Response::make(strtoupper($value));    });   }}
ログイン後にコピー

macro方法接收一个别名作为第一个参数,接收一个闭包作为第二个参数。闭包会在访问ResponseFactory实现的实例的动态属性macro别名时执行,或者通过全局帮助方法response:

return response()->caps('foo');
ログイン後にコピー
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート