聞く
- #PSR-7 リクエスト リクエスト##古いデータ
- ##Cookie
- ##ファイル
- アップロードされたファイルの受信
- #アップロードされたファイルの保存
- ##信頼プロキシを構成する
- ##リクエストを受け入れる 現在の HTTP リクエストを取得するには依存関係の注入を通じてインスタンスを使用するには、コントローラーに
クラスを導入する必要があります。受信リクエストのインスタンスは、サービス コンテナーによって自動的に注入されます: <?php namespace App\Http\Controllers; use Illuminate\Http\Request; class UserController extends Controller{ /** * 存储一个新用户。 * * @param Request $request * @return Response */ public function store(Request $request) { $name = $request->input('name'); // } }
依存関係の挿入とルート パラメーター
コントローラーがルート パラメーターからデータを取得する必要がある場合は、他の依存関係の後にパラメーターを含める必要があります。たとえば、ルートは次のように定義されます。 Route::put('user/{id}', 'UserController@update');
次のメソッドを通じてコントローラーを定義し、
:
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class UserController extends Controller{ /** * 更新指定用户 * * @param Request $request * @param string $id * @return Response */ public function update(Request $request, $id) { // } }
クロージャ ルーティングを通じてパラメータを取得する
use Illuminate\Http\Request;
Route::get('/', function (Request $request) {
//
});
リクエスト パスとメソッド
Symfony\Component\HttpFoundation\Request
クラスを継承します。このクラスの重要なメソッドをいくつか次に示します:リクエスト パスの取得
path
このメソッドは、リクエストされたパス情報を返します。したがって、要求されたパスが http://domain.com/foo/bar
の場合、path
メソッドは foo/bar
:
$uri = $request->path();を返します。
is
は、受信リクエストのパスが指定されたパターンと一致するかどうかを検証できます。このメソッドでは、# 文字をワイルドカードとして使用することもできます。
if ($request->is('admin/*')) { // }
リクエスト URL
を取得するには、url を使用できます。
または fullUrl
メソッドを使用して、完全なリクエスト URL を取得します。 url
このメソッドは、クエリ文字列を含まない URL を返します。 fullUrl
クエリ文字列を含む URL を取得します。
// 不附带查询串... $url = $request->url(); // 附带查询串... $url = $request->fullUrl();
Getリクエストメソッド
method
このメソッドは、要求された HTTP アクションを返します。 isMethod
メソッドを使用して、HTTP アクションが指定されたゲストと一致することを確認することもできます:
$method = $request->method();if ($request->isMethod('post')) { // }
PSR -7 Request
PSR-7 標準は、リクエストとレスポンスを含む HTTP メッセージ インターフェイスを定義します。 Laravel リクエストの代わりに PSR-7 リクエストを使用したい場合は、最初にいくつかのライブラリをインストールする必要があります。 Laravel は、Symfony HTTP Message Bridge コンポーネントを使用して、典型的な Laravel リクエストとレスポンスを PSR-7 準拠の実装に変換します。
composer require symfony/psr-http-message-bridge composer require zendframework/zend-diactoros
これらのライブラリがインストールされると、ルート クロージャに渡すことができます。またはコントロール コントローラー メソッドでリクエスト インターフェイス タイプのヒントを使用して、PSR-7 リクエストを取得します。
use Psr\Http\Message\ServerRequestInterface; Route::get('/', function (ServerRequestInterface $request) { // });
#入力クリッピングと正規化デフォルトでは、Laravel はアプリケーションのグローバルミドルウェアスタックで実行されます。 ##TrimStrings{tip} PSR-7 レスポンス インスタンスがルートまたはコントローラーから返された場合、フレームワーク自動的に Laravel 応答インスタンスに変換されて表示されます。
および ConvertEmptyStringsToNull
ミドルウェア。これらのミドルウェアは、App\Http\Kernel
クラスのスタック リストに配置されます。リクエスト内のすべての入力文字列フィールドを自動的にトリミングし、空の文字列フィールドを null
に変換します。こうすることで、ルーティングとコントローラーの標準化された規約を気にする必要がなくなります。 この動作を無効にしたい場合は、
クラスの $middleware
属性からこの動作を削除します (中間から削除するのと同じです)ファイルスタックから削除されたアプリケーション)。
all
メソッド:$input = $request->all();
単一の入力値を取得する
いくつかの簡単なメソッドを使用して、Illuminate\Http\Request
インスタンスを通じてすべてのユーザー入力を取得します。どのユーザー リクエストかを気にする必要はありません。 HTTP アクションが使用されます。 HTTP アクションに関係なく、ユーザーのリクエストは input
メソッドで取得できます。
$name = $request->input('name');
デフォルト値は、2 番目のパラメーターとして input
メソッドに渡すことができます。 。リクエストにこのパラメータが含まれていない場合、この値が返されます:
$name = $request->input('name', 'Sally');
配列入力を含むフォームを操作する場合は、「ドット」演算子を使用して配列要素にアクセスします:
$name = $request->input('products.0.name'); $names = $request->input('products.*.name');
Withoutパラメータ input
メソッドを呼び出して、すべての入力値 (連想配列形式) を取得します。
$input = $request->input();
クエリ文字列から入力を取得します。
input メソッドはリクエスト キャリア全体 (クエリ文字列を含む) から値を取得し、query
メソッドはクエリ文字列からのみ値を取得します:
クエリ文字列値が存在しない場合は、$name = $request->query('name');
メソッドの 2 番目のパラメータがパラメータのデフォルト値として返されます。 $name = $request->query('name', 'Helen');
メソッドを呼び出します。パラメーターなしでクエリ文字列のすべての値を取得します (連想配列形式): $query = $request->query();
ユーザー入力には、
Illuminate\Http\Request インスタンスの動的プロパティ。たとえば、アプリケーションフォームに name
フィールドが含まれている場合、次のようにそのフィールドの値にアクセスできます:
動的プロパティを使用する場合、Laravel は最初にパラメーターの値を探します。リクエスト本文に。値が存在しない場合、Lavarel はルート パラメーターを検索します。 $name = $request->name;
JSON リクエストをアプリケーションに渡すとき、次の条件を満たす限り、
input メソッドを通じて JSON データにアクセスできます。要求された Content-Type
ヘッダーは application/json
に設定されます。 「ドット」構文を使用して JSON 配列にアクセスすることもできます。 $name = $request->input('user.name');
入力データのサブセットを取得する必要がある場合は、
only または excel
メソッドを使用できます。単一の array
または動的パラメータ リストを受け入れます: $input = $request->only(['username', 'password']);
$input = $request->only('username', 'password');
$input = $request->except(['credit_card']);
$input = $request->except('credit_card');
only#入力値が存在するかどうかを確認するこのメソッドはリクエスト内のすべてのキーと値のペアを返します。に存在しないリクエストのキーと値のペアは返されません。
has
メソッドは、指定された値がリクエストに存在するかどうかを確認するために使用されます。値がリクエストに存在する場合、has メソッドは
true:
if ($request->has('name')) { // }
配列が指定された場合、
has メソッドは次のことを決定します。かどうか、指定されたすべての値が存在するかどうか: if ($request->has(['name', 'email'])) { // }
値がリクエストに存在し、空ではないかどうかを確認したい場合は、
filled メソッドを使用する必要があります: if ($request->filled('name')) { // }
古いデータ
Laravel では、リクエスト間でデータを保持できます。この機能は、検証エラーの後にフォームを再入力するときに役立ちます。ただし、Lavarel の組み込み検証機能を使用する場合は、Laravel の組み込み検証機能の一部が自動的にこれらのメソッドを呼び出すため、これらのメソッドを手動で呼び出す必要はありません。
入力データをセッションに送信します。
Illuminate\Http\Request
クラスの flash
メソッドは、現在のデータを転送します。 input セッションに渡されますが、ユーザーがアプリケーションに次のリクエストを行ったときにも使用できます:
$request->flash();
flashOnly
または flashExcept
メソッドを使用して、リクエストデータのサブセットをセッションに送信します。これらのメソッドは、パスワードなどの機密データをセッション永続性から除外するためによく使用されます。
$request->flashOnly(['username', 'email']);$request->flashExcept('password');
データを転送してジャンプ
入力をセッションに送信してから、前のページにジャンプします。これは、ジャンプ関数の後に withInput
メソッドを呼び出すことで簡単に実行できます。
return redirect('form')->withInput(); return redirect('form')->withInput( $request->except('password') );
Get old data
To前のリクエストによって送信されたデータを取得するには、Request
インスタンスの old
メソッドを使用できます。 old
メソッドは、以前に送信された値をセッションから取得します。
$username = $request->old('username');
Laravel は、グローバル old
ヘルパーも提供します。 Blade テンプレート内の古いデータを表示する場合は、old
アシスタントを使用する方が簡単です。指定されたドメインの古い値が存在しない場合は、null
:
<input type="text" name="username" value="{{ old('username') }}">#Cookies## が返されます。
Lavarel フレームワークによって生成されるすべての Cookie は暗号化され、認証コードで署名されます。つまり、クライアントによって変更されると無効になります。 。 Cookie 値は、
Illuminate\Http\Request インスタンスの cookie
メソッドを使用してリクエストから取得できます: $value = $request->cookie('name');
Cookie にアクセスするためのファサード 値: $value = Cookie::get('name');
メソッドを使用して Illuminate\Http\Response
Cookie をインスタンスにアタッチします。名前、値、および Cookie の有効期限 (分単位) をこのメソッドに渡す必要があります。 return response('Hello World')->cookie(
'name','value',$minutes
);
他のあまり使用されないパラメーターを受け入れることもできます。通常、これらのパラメータは、PHP の組み込み setcookie メソッドのパラメータと同じ役割と意味を持ちます。
同様に、return response('Hello World')->cookie(
'name', 'value', $minutes, $path, $domain, $secure, $httpOnly
);
ファサードを使用して、アプリケーションからの出力を「配置」することができます。 . 応答クッキー。 queue
メソッドは、Cookie
インスタンス、または Cookie
の作成に必要なパラメーターのリストを受け入れます。これらの Cookie は、ブラウザに送信される前に出力応答に追加されます: Cookie::queue(Cookie::make('name', 'value', $minutes));
Cookie::queue('name', 'value', $minutes);
Generate Cookie Instance
後で応答インスタンスに提供できる Symfony\Component\HttpFoundation\Cookie
インスタンスを生成したい場合は、グローバル を使用できます。クッキー
アシスタント。この Cookie は、応答インスタンスに添付されずにクライアントに返されません:
$cookie = cookie('name', 'value', $minutes); return response('Hello World')->cookie($cookie);
#File
アップロードされたファイルを取得します
Illuminate\Http\Request# の
file メソッドを使用できます。 ## アップロードされたファイルへのインスタンスまたは動的属性アクセス。
file メソッドは、
Illuminate\Http\UploadedFile クラスのインスタンスを返します。このクラスは、PHP の
SplFileInfo クラスから拡張され、ファイル操作のための複数のメソッドを提供します。
$file = $request->file('photo');
$file = $request->photo;
メソッドを使用して、指定されたファイルがリクエスト内に存在するかどうかを確認できます: if ($request->hasFile('photo'))
{
//
}
Inファイルが存在するかどうかを確認するだけでなく、
isValid メソッドを使用して、アップロードされたファイルに問題があるかどうかを確認することもできます: if ($request->file('photo')->isValid()) {
//
}
このクラスには、ファイルのフル パスと拡張子にアクセスするためのメソッドも含まれています。 extension
メソッドは、ファイルの内容に基づいて、一致するファイル拡張子を推測します。この拡張子は、クライアントによって提供される拡張子とは異なる場合があります: $path = $request->photo->path();
$extension = $request->photo->extension();
他にもいくつかの例があります。利用可能。これらのメソッドの詳細については、このクラスの API ドキュメントを参照してください。
UploadedFile
のstore メソッドを使用して、アップロードされたファイルをディスクの 1 つに移動できます。これは、ローカル ファイル システム上の場所、または Amazon S3 のようなクラウドの保存場所にすることもできます。 。
store
store
$path = $request->photo->store('images'); $path = $request->photo->store('images', 's3');
ファイル名を自動的に生成したくない場合は、
storeAs メソッドを使用できます。パラメータとしてパス、ファイル名、ディスク名: $path = $request->photo->storeAs('images', 'filename.jpg'); $path = $request->photo->storeAs('images', 'filename.jpg', 's3');
信頼できるプロキシの構成
期限切れの TLS/SSL 証明書を使用してロード バランサーの背後でアプリケーションを実行している場合、アプリケーションが HTTPS リンクの生成に失敗することがあります。通常、これは、アプリケーションが安全なリンクを生成する必要があるかどうかを認識せずに、ポート 80 でロード バランサーからのトラフィックを転送していることが原因です。
この問題を解決するには、Laravel アプリケーションに App\Http\Middleware\TrustProxies
ミドルウェアを含める必要があります。これにより、アプリケーションが信頼するロード バランサーまたはプロキシをすばやくカスタマイズできるようになります。信頼できるプロキシは、このミドルウェアの $proxies
プロパティに配列としてリストされる必要があります。信頼できるプロキシの構成に加えて、どのプロキシを信頼するかを構成することもできます。 $header
:
<?php namespace App\Http\Middleware; use Illuminate\Http\Request; use Fideloper\Proxy\TrustProxies as Middleware; class TrustProxies extends Middleware{ /** * 应用程序的可信代理列表 * * @var array */ protected $proxies = [ '192.168.1.1', '192.168.1.2', ]; /** * 应该用来检测代理的头信息 * * @var string */ protected $headers = Request::HEADER_X_FORWARDED_ALL;}
{tip} AWS Elastic Load Balancing を使用する場合、
$header
値はRequest::HEADER_X_FORWARDED_AWS_ELB
である必要があります。$headers
属性で使用できる定数の詳細については、プロキシの信頼に関する Symfony のドキュメントを参照してください。
すべてのプロキシを信頼する
Amazon AWS または別の「クラウド」ロード バランサー プロバイダーを使用している場合、ロード バランサーの実際の IP アドレスがわからない場合があります。この場合、# を使用してすべてのプロキシを信頼できます。
/** * 应用程序的可信代理列表 * * @var array */ protected $proxies = '*';