聞く


#受信リクエスト

リクエストのパスとメソッド
  • #PSR-7 リクエスト リクエスト##古いデータ
  • ##Cookie
  • ##ファイル
  • ##信頼プロキシを構成する
    • ##リクエストを受け入れる
    • 現在の HTTP リクエストを取得するには依存関係の注入を通じてインスタンスを使用するには、コントローラーに
    Illuminate\Http\Request
  • クラスを導入する必要があります。受信リクエストのインスタンスは、サービス コンテナーによって自動的に注入されます:
  • <?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');
次のメソッドを通じてコン​​トローラーを定義し、

Illuminate\Http\Request
クラスを使用してルート パラメーターを取得できます
id

:

<?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)   
       {      
         //   
        }
    }

クロージャ ルーティングを通じてパラメータを取得する

ルーティング クロージャ ## クラスで
Illuminate\Http\Request# を使用することもできます。サービス コンテナは、リクエスト パラメータをルーティング クロージャに自動的に挿入します:

use Illuminate\Http\Request;
Route::get('/', function (Request $request) { 
   //
 });

リクエスト パスとメソッド

Illuminate\Http\Request
インスタンスは、HTTP リクエストパラメーターを検証するための一連のメソッドを提供し、

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) { 
   //
 });

{tip} PSR-7 レスポンス インスタンスがルートまたはコントローラーから返された場合、フレームワーク自動的に Laravel 応答インスタンスに変換されて表示されます。

#入力クリッピングと正規化

デフォルトでは、Laravel はアプリケーションのグローバルミドルウェアスタックで実行されます。 ##TrimStrings

および ConvertEmptyStringsToNull ミドルウェア。これらのミドルウェアは、App\Http\Kernel クラスのスタック リストに配置されます。リクエスト内のすべての入力文字列フィールドを自動的にトリミングし、空の文字列フィールドを null に変換します。こうすることで、ルーティングとコントローラーの標準化された規約を気にする必要がなくなります。 この動作を無効にしたい場合は、

App\Http\Kernel

クラスの $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');
クエリ文字列値が存在しない場合は、

query

メソッドの 2 番目のパラメータがパラメータのデフォルト値として返されます。

$name = $request->query('name', 'Helen');

query

メソッドを呼び出します。パラメーターなしでクエリ文字列のすべての値を取得します (連想配列形式):

$query = $request->query();

動的プロパティを介した入力の取得

ユーザー入力には、

Illuminate\Http\Request

インスタンスの動的プロパティ。たとえば、アプリケーションフォームに name フィールドが含まれている場合、次のようにそのフィールドの値にアクセスできます:

$name = $request->name;
動的プロパティを使用する場合、Laravel は最初にパラメーターの値を探します。リクエスト本文に。値が存在しない場合、Lavarel はルート パラメーターを検索します。

JSON 入力の取得

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');

{tip}
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## が返されます。

#リクエストから Cookie を取得する

Lavarel フレームワークによって生成されるすべての Cookie は暗号化され、認証コードで署名されます。つまり、クライアントによって変更されると無効になります。 。 Cookie 値は、

Illuminate\Http\Request

インスタンスの cookie メソッドを使用してリクエストから取得できます:

$value = $request->cookie('name');

Cookie を使用することもできます。

Cookie にアクセスするためのファサード 値:

$value = Cookie::get('name');

Cookie を応答に添付します

cookie

メソッドを使用して Illuminate\Http\Response Cookie をインスタンスにアタッチします。名前、値、および Cookie の有効期限 (分単位) をこのメソッドに渡す必要があります。

return response('Hello World')->cookie( 
   'name','value',$minutes
  );

cookie

他のあまり使用されないパラメーターを受け入れることもできます。通常、これらのパラメータは、PHP の組み込み setcookie メソッドのパラメータと同じ役割と意味を持ちます。

return response('Hello World')->cookie( 
   'name', 'value', $minutes, $path, $domain, $secure, $httpOnly
  );
同様に、

Cookie

ファサードを使用して、アプリケーションからの出力を「配置」することができます。 . 応答クッキー。 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;

hasFile

メソッドを使用して、指定されたファイルがリクエスト内に存在するかどうかを確認できます:

if ($request->hasFile('photo')) 
  { 
   //
 }

アップロードが成功したことを確認する

Inファイルが存在するかどうかを確認するだけでなく、

isValid

メソッドを使用して、アップロードされたファイルに問題があるかどうかを確認することもできます:

if ($request->file('photo')->isValid()) {
    //
  }

ファイル パス & extension

UploadedFile

このクラスには、ファイルのフル パスと拡張子にアクセスするためのメソッドも含まれています。 extension メソッドは、ファイルの内容に基づいて、一致するファイル拡張子を推測します。この拡張子は、クライアントによって提供される拡張子とは異なる場合があります:

$path = $request->photo->path();
$extension = $request->photo->extension();

その他のファイル メソッド

UploadedFile

他にもいくつかの例があります。利用可能。これらのメソッドの詳細については、このクラスの API ドキュメントを参照してください。

#アップロードされたファイルを保存する
アップロードされたファイルを保存するには、まずファイル システムを構成します。

UploadedFile

store メソッドを使用して、アップロードされたファイルをディスクの 1 つに移動できます。これは、ローカル ファイル システム上の場所、または Amazon S3 のようなクラウドの保存場所にすることもできます。 。 store

メソッドは、ファイル システムに構成されている保存ファイルのルート ディレクトリに対する相対パスを受け入れます。システムはファイル名として一意の ID を自動的に生成するため、このパスにファイル名を含めることはできません。

store

このメソッドは、オプションの 2 番目のパラメーター (ファイルが保存されているディスクの名前) も受け入れます。このメソッドは、ディスクのルートを基準としたファイル パスを返します。

$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 = '*';
この記事は、LearnKu.com Web サイトに初めて掲載されました。