依存性注入によって http リクエストのインスタンスを簡単に取得するには、コントローラーのコンストラクターまたは制御関数に型宣言 IlluminateHttpRequest を記述する必要があります。現在のリクエストのインスタンスはサービス コンテナから自動的に挿入されます:
<?phpnamespace App\Http\Controllers;use Illuminate\Http\Request;class UserController extends Controller { public function store (Request $request) { $name = $request->input('name'); }}
コントローラー メソッドがルートからパラメーターを受け取る必要がある場合は、依存関係注入パラメーターの後に受信するパラメーターを追加する必要があります。たとえば、ルートは次のように定義されます:
Route::put('user/{id}', 'UserController@update');
次に、最初に依存性注入 IlluminateHttpReqeust を宣言し、次にルート パラメーターを次の順序で渡す必要があります:
<?phpnamespace App\Http\Controllers;use Illuminate\Http\Request;class UserController extends Controller { public function update (Request $request, $id) { // }}
IlluminateHttpRequest のインスタンスは、アプリケーション A にさらに多くの情報を提供します。 HTTP リクエストをチェックするメソッド。SymfonyComponentHttpFoundationRequest から継承します。一般的に使用されるメソッドをいくつか示します。
path メソッドはリクエストされた URI を返します。そのため、リクエストのターゲット アドレスが http://domain.com/foo/bar の場合、path メソッドは戻ります。 foo/ bar:
$uri = $request->path();
is メソッドを使用すると、要求された URI が指定されたパターンと一致することを確認できます。 * 文字をワイルドカードとして使用できます:
if ($request->is('admin/*')) { //}
リクエストの完全なパスを取得したい場合は、url または fullUrl メソッドを使用できます:
// Without Query String...$url = $request->url();// With Query String...$url = $request->fullUrl();
完全なパスを取得するときに、リクエスト パラメータ情報を追加することもできます。たとえば、リクエストのパス。リクエストのターゲットが http://domain.com/foo の場合、次のメソッドは http://domain.com/foo?bar=baz:
$url = $request->fullUrlWithQuery(['bar' => 'baz']);
methodメソッドはHTTPリクエストのWayを返します。 isMethod メソッドを使用して、http リクエスト メソッドで一致検証を実行することもできます。
$method = $request->method();if ($request->isMethod('post')) { //}
PSR-7 標準では、PSR を取得する場合のリクエストとレスポンスを含む、http のいくつかのメッセージ インターフェイスが指定されています。 -7 request たとえば、最初にいくつかのサポートライブラリをインストールする必要があります。Laravel は Symfon HTTP Bridge コンポーネントを使用して、典型的な laravel リクエストと応答を PSR-7 互換の実装に変換します。 PSR-7 リクエストを取得するには、ルートまたはコントローラーにヒントを入力します:
composer require symfony/psr-http-message-bridgecomposer require zendframework/zend-diactoros
ルートまたはコントローラーが PSR-7 レスポンス インスタンスを返す場合、それは自動的に Laravel レスポンス インスタンスに変換されます。
入力値を取得する
use Psr\Http\Message\ServerRequestInterface;Route::get('/', function (ServerRequestInterface $request) { // });
値がリクエストに存在しない場合は、デフォルト値として返されます:
$name = $request->input('name');
2 番目のパラメータを入力メソッドに渡すこともできます。
フォームが送信されるとき、一部の入力値が配列である場合、 . 演算子を使用してリクエスト内の配列値にアクセスできます:rrree
JSON リクエストの入力値を取得しますhas メソッドを使用して、リクエストにユーザーからの入力値が含まれているかどうかを判断できます。値が空の文字列でない場合、has メソッドは true を返します:
$name = $request->input('name', 'Sally');
all メソッドを使用すると、すべてのユーザー入力値を取得できます。これにより、すべてのユーザー値を含む配列が返されます。 :
$name = $request->input('products.0.name');$names = $request->input('products.*.name');
Only メソッドまたはExcept メソッドを使用して、入力の一部を取得できます両方のメソッドは、別の配列または動的パラメーターのリストを受け取ります:
$name = $request->input('user.name');
IlluminatHttpRequest を使用できます。アプリケーション フォームに名前フィールドがある場合は、インスタンスの動的属性が使用されます。次の方法でリクエストフィールドを取得できます:
if ($request->has('name')) { //}
古い入力
Laravel では、次のリクエスト中にそのリクエストに対する入力を返します。この機能は、フォーム検証が失敗した場合に特に便利で、以前のリクエストを再利用して自動入力できるようになります。 Laravel の検証サービスを使用する場合、Laravel の組み込みの検証メカニズムが自動的に呼び出すため、手動で呼び出す必要はありません。
IlluminateHttpRequest インスタンスの flash メソッドは、現在のリクエストの入力をセッションにフラッシュします。これにより、アプリケーションはユーザーの次のリクエストを受け入れるときにそれを再利用できます:
$input = $request->all();
$input = $request->only(['username', 'password']);$input = $request->only('username', 'password');$input = $request->except(['credit_card']);$input = $request->except('credit_card');
一般的なシナリオは、ユーザーの入力とともに前のページに戻る必要があることです。 withInput チェーン メソッドを使用します:
古いメソッドを使用して、最後のリクエストによってフラッシュされたユーザー リクエストを取得できます:
$username = $request->old('username');
laravel提供了全局old帮助方法。你也可以在blade模板中使用该方法,如果上次请求未闪存该输入,则会返回null:
<input type="text" name="username" value="{{ old('username') }}">
在laravel中所有的cookie在被创建时都会经过一个认证码进行签证加密,这就意味着laravel会验证客户端对cookie的修改.你可以使用Illuminate\Http\Request实例的cookie方法来获取cookie值:
$value = $request->cookie('name');
laravel提供了一个全局的cookie帮助方法用来生成一个Symfony\Component\HttpFoundation\Cookie实例,该实例可以被Illuminate\Http\Response实例的withCookie附加:
$response = new Illuminate\Http\Response('Hello World');$response->withCookie('name', 'value', $minutes);return $response;
你可以使用cookie方法来创建一个长达5年的长cookie,它要求你使用不带参数的cookie帮助方法直接调用forever方法:
$response->withCookie(cookie()->forever('name', 'value'));
你可以通过Illuminate\Http\Request的file方法来访问上传的文件。该方法会返回一个Symfony\Component\HttpFoundation\File\UploadedFile类的实例,它继承自SplFileInfo,提供了多种与文件交互的方法:
$file = $request->file('photo');
你可以使用hasFile方法来判断文件在请求中是否存在:
if ($request->hasFile('photo')) { // }
你可以使用isValid方法来验证文件上传的过程中是否出错:
if ($request->file('photo')->isValid()) { //}
你可以使用move方法来将上传的文件从临时目录中迁移到指定的目录中:
$request->file('photo')->move($destinationPath);$request->file('photo')->move($destinationPath, $fileName);
UploadedFile还有其他许多可用的方法,你可以查看 该类的API文档 来了解更多.