URL


ベース URL の生成

    現在の URL へのアクセス
  • 名前付きルートURL
  • デフォルトvalue
  • はじめに
  • Laravel は、アプリケーションの URL を生成するためのいくつかのヘルパー関数を提供します。主に、テンプレートおよび API 応答で URL を構築したり、アプリケーションの他の部分でリダイレクト応答を生成したりするために使用されます。

#基本

生成基本 URL

補助関数url

は、アプリケーション内の任意の URL に使用できます。生成された URL は、現在のリクエストのスキーム ( HTTP または HTTPS ) とホストを自動的に使用します:
$post = App\Post::find(1);
echo url("/posts/{$post->id}");
// http://example.com/posts/1

現在の URL にアクセスします

ヘルパー関数 url にパスが指定されていない場合は、Illuminate\Routing\UrlGenerator インスタンスが返されて、次のことが可能になります。現在の URL に関する情報にアクセスします URL 情報:

// Get the current URL without the query string...
echo url()->current();
// Get the current URL including the query string...
echo url()->full();
// Get the full URL for the previous request...
echo url()->previous();

上記のメソッドは、URL ファサードを通じてアクセスできます:

use Illuminate\Support\Facades\URL;
echo URL::current();

##名前付きルートの URL

補助関数

route を使用して、指定されたルートの URL を生成できます。名前付きルートによって生成された URL は、ルート上で定義された URL に結合されません。したがって、ルートの URL に変更があった場合でも、route 関数呼び出しを変更する必要はありません。たとえば、アプリケーションに次のルートが含まれているとします。

Route::get('/post/{post}', function () { 
   //
})->name('post.show');

このルートの URL を生成するには、次のようにヘルパー関数

route を使用できます。通常は、Eloquent モデルの主キーを使用して URL を生成します。したがって、Eloquent モデルをパラメーター値として渡すことができます。 route

ヘルパー関数はモデルの主キーを自動的に抽出します:

echo route('post.show', ['post' => 1]);
// http://example.com/post/1
ヘルパー関数 route

複数のパラメーターを持つルートの URL を生成するために使用することもできます:

echo route('post.show', ['post' => $post]);

署名付き URL
Laravel を使用すると、名前付きパスの「署名付き」URL を簡単に作成できます。これらの URL にはクエリ文字列に「署名付き」ハッシュが追加されており、Laravel は URL が作成されてから変更されていないことを確認できます。署名付き URL は、公的にアクセス可能だが URL 操作に対する保護層が必要なルートに特に役立ちます。

たとえば、署名付き URL を使用して、顧客に電子メールで送信される公開「購読解除」リンクを実装できます。パスを指す署名付き URL を作成するには、ファサードの

signedRoute

メソッド

URL:

Route::get('/post/{post}/comment/{comment}', function () { 
   //
})->name('comment.show');
echo route('comment.show', ['post' => 1, 'comment' => 3]);
// http://example.com/post/1/comment/3
を使用します。期限切れの一時的な署名付きルート URL を生成したい場合は、次のようにすることができます。次の temporarySignedRoute

メソッドを使用します:

use Illuminate\Support\Facades\URL;return URL::signedRoute('unsubscribe', ['user' => 1]);

Validate Signed Route Request
受信リクエストに有効な署名があることを確認するには、 # を呼び出す必要があります。 ##hasValidSignature

受信メソッド

Request

:

use Illuminate\Support\Facades\URL;return URL::temporarySignedRoute( 
   'unsubscribe', now()->addMinutes(30), ['user' => 1]
  );
あるいは、Illuminate\Routing\Middleware\ValidateSignature ミドルウェアをルートに割り当てることもできます。存在しない場合は、このミドルウェアに HTTP カーネルの

routeMiddleware

配列内のキーを割り当てる必要があります。

use Illuminate\Http\Request;
Route::get('/unsubscribe/{user}', function (Request $request) { 
   if (! $request->hasValidSignature()) {      
      abort(401);    
    }   
   // ...
})->name('unsubscribe');
カーネルにミドルウェアを登録した後、ルートミドルウェアにアタッチできます。受信リクエストに有効な署名がない場合、ミドルウェアは自動的に 403 エラー応答を返します:

/**
 * 应用程序的路由中间件
 *
 * 这些中间件可能被分配给组或单独使用
 *
 * @var array
 */
 protected $routeMiddleware = [ 
    'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
 ];

コントローラ アクションの URL

action 関数は、指定されたコントローラ アクションの URL を生成できます。この機能では、コントローラーの完全な名前空間を渡す必要はありませんが、名前空間に対する相対的なコントローラー クラス名を渡す必要があります App\Http\Controllers:

Route::post('/unsubscribe/{user}', function (Request $request) { 
   // ...
})->name('unsubscribe')->middleware('signed');

「呼び出し可能」配列構文参照アクションも使用します:

$url = action('HomeController@index');

コントローラー メソッドにルート パラメーターが必要な場合は、それらを 2 番目のパラメーターとして action 関数に渡します:

use App\Http\Controllers\HomeController;
$url = action([HomeController::class, 'index']);

デフォルト値

アプリケーションによっては、特定の URL パラメータのリクエスト スコープにデフォルト値を指定することが必要な場合があります。たとえば、いくつかのルートが {locale} パラメータを定義しているとします。

$url = action('UserController@profile', ['id' => 1]);

また、補助関数 route を毎回 locale 経由で呼び出すのは非常に面倒です。したがって、URL::defaults メソッドを使用してこのパラメータのデフォルト値を定義すると、パラメータが現在のリクエストに常に存在するようになります。このメソッドは、ルーティング ミドルウェアから呼び出して、現在のリクエストにアクセスできます。

Route::get('/{locale}/posts', function () {    //})->name('post.index');

locale パラメータのデフォルト値が設定されたら、ヘルパー関数を渡す必要はなくなります route URL を生成するときにその値を渡します。

この記事は、LearnKu.com Web サイトで初めて公開されました。