ホームページ  >  記事  >  php教程  >  Laravelフレームワークのルーティング構成の概要と設定のヒント

Laravelフレームワークのルーティング構成の概要と設定のヒント

高洛峰
高洛峰オリジナル
2016-12-27 11:12:491508ブラウズ

基本ルーティング

アプリケーションのルートの大部分は app/routes.php ファイルで定義されます。 Laravel の最も単純なルートは、URI とクロージャー呼び出しで構成されます。

基本的なGETルート

<span style="font-size: 16px;">Route::get(&#39;/&#39;, function()<br/>{<br/>return &#39;Hello World&#39;;<br/>});<br/></span>

基本的なPOSTルート

<span style="font-size: 16px;">Route::post(&#39;foo/bar&#39;, function()<br/>{<br/>return &#39;Hello World&#39;;<br/>});<br/></span>

すべてのHTTPメソッドに応答するルートを登録します

<span style="font-size: 16px;">Route::any(&#39;foo&#39;, function()<br/>{<br/>   return &#39;Hello World&#39;;<br/>});<br/></span>

HTTPS経由でアクセスされるルートを強制します

<span style="font-size: 16px;">Route::get(&#39;foo&#39;, array(&#39;https&#39;, function()<br/>{<br/>    return &#39;Must be over HTTPS&#39;;<br/>}));<br/></span>

頻繁に必要になるURL::to メソッドを使用して URL を生成できます。

<span style="font-size: 16px;">$url = URL::to(&#39;foo&#39;);<br/></span>

ルーティング パラメータ

<span style="font-size: 16px;">Route::get(&#39;user/{id}&#39;, function($id)<br/>{<br/>return &#39;User &#39;.$id;<br/>});<br/></span>

オプションのルーティング パラメータ

<span style="font-size: 16px;">Route::get(&#39;user/{name?}&#39;, function($name = null)<br/>{<br/>return $name;<br/>});<br/></span>

オプションのルーティング パラメータ

<span style="font-size: 16px;">Route::get(&#39;user/{name?}&#39;, function($name = &#39;John&#39;)<br/>{<br/>return $name;<br/>});<br/></span>

(デフォルト値あり) 正規表現の制約付きルート

<span style="font-size: 16px;">Route::get(&#39;user/{name}&#39;, function($name)<br/>{<br/>//<br/>})<br/>->where(&#39;name&#39;, &#39;[A-Za-z]+&#39;);<br/>Route::get(&#39;user/{id}&#39;, function($id)<br/>{<br/>//<br/>})<br/>->where(&#39;id&#39;, &#39;[0-9]+&#39;);<br/></span>

ルート フィルター

ルート フィルターは、指定されたルートへのアクセスを制限する簡単な方法を提供します。これは、認証が必要なサイトのゾーンを作成する必要がある場合に非常に便利です。 Laravel フレームワークには、auth フィルター、auth.basic フィルター、ゲスト フィルター、csrf フィルターなどのいくつかのルーティング フィルターが含まれています。これらは app/filters.php ファイルに保存されます。

ルートフィルターを定義する

Route::filter(&#39;old&#39;, function()
{
if (Input::get(&#39;age&#39;) < 200)
{
return Redirect::to(&#39;home&#39;);
}
});

ルートフィルターから応答が返された場合、この応答はこのリクエストに対する応答とみなされ、ルートは実行されず、このルートに関連する後続のフィルターもキャンセルされます。 。 埋め込む。

Route::get(&#39;user&#39;, array(&#39;before&#39; => &#39;old&#39;, function()
{
return &#39;You are over 200 years old!&#39;;
}));

ルートのルートフィルタを指定します

Route::get(&#39;user&#39;, array(&#39;before&#39; => &#39;auth|old&#39;, function()
{
return &#39;You are authenticated and over 200 years old!&#39;;
}));

ルートフィルタのパラメータを指定します

Route::filter(&#39;age&#39;, function($route, $request, $value)
{
//
});
Route::get(&#39;user&#39;, array(&#39;before&#39; => &#39;age:200&#39;, function()
{
return &#39;Hello World&#39;;
}));

ルートフィルタが3番目のパラメータとして応答を受け取るとき $response:

Route::filter(&#39;log&#39;, function($route, $request, $response, $value)
{
//
});

基本的なルートフィルタのモード

URI に基づいてルートのセットのフィルターを指定します。

Route::filter(&#39;admin&#39;, function()
{
//
});
Route::when(&#39;admin/*&#39;, &#39;admin&#39;);

上記の例では、admin/ で始まるすべてのルートに管理フィルターが適用されます。アスタリスクはワイルドカード文字として機能し、すべての文字の組み合わせに一致します。

HTTP メソッドを指定してパターン フィルターを制限することもできます。

Route::when(&#39;admin/*&#39;, &#39;admin&#39;, array(&#39;post&#39;));

フィルター クラス

高度なフィルターの場合、クロージャー関数の代わりにクラスを使用できます。フィルター クラスはアプリケーションの外部に存在する IoC コンテナーであるため、フィルター内で依存関係の注入を使用でき、テストが容易になります。

フィルタークラスを定義する

class FooFilter {
public function filter()
{
// Filter logic...
}
}

クラスベースのフィルターを登録する

Route::filter(&#39;foo&#39;, &#39;FooFilter&#39;);

名前付きルート

名前付きルートを使用すると、リダイレクトや URL を生成するときにルートを簡単に指定できます。次のようにルートの名前を指定できます:

Route::get(&#39;user/profile&#39;, array(&#39;as&#39; => &#39;profile&#39;, function()
{
//
}));

コントローラー メソッドのルート名も指定できます:

  Route::get(&#39;user/profile&#39;, array(&#39;as&#39; => &#39;profile&#39;, &#39;uses&#39; => 
&#39;UserController@showProfile&#39;));

URL またはリダイレクトを生成するときにルート名を使用できるようになりました:

$url = URL::route(&#39;profile&#39;);
$redirect = Redirect::route(&#39;profile&#39;);

currentRouteName メソッドを使用できますルートの名前を取得するには:

$name = Route::currentRouteName();

Route group

ルートのグループにフィルターを適用したい場合があります。各ルートにフィルターを指定する必要はなく、ルート グループを使用できます:

Route::group(array(&#39;before&#39; => &#39;auth&#39;), function()
{
Route::get(&#39;/&#39;, function()
{
// Has Auth Filter
});
Route::get(&#39;user/profile&#39;, function()
{
// Has Auth Filter
});
});

サブドメイン ルーティング

Laravel ルーティングはワイルドカード サブドメインを処理し、ドメイン名からワイルドカード パラメーターを取得することもできます:

サブドメイン ルーティングを登録する

Route::group(array(&#39;domain&#39; => &#39;{account}.myapp.com&#39;), function()
{
Route::get(&#39;user/{id}&#39;, function($account, $id)
{
//
});
});

ルート プレフィックス

属性配列の prefix オプションを使用して、ルートのグループにプレフィックスを付けることができます:

ルート グループにプレフィックスを追加します

Route::group(array(&#39;prefix&#39; => &#39;admin&#39;), function()
{
Route::get(&#39;user&#39;, function()
{
//
});
});

ルート モデル バインディング

モデル バインディングは、ルートにプレフィックスを追加する簡単な方法を提供しますモデル。たとえば、ユーザーの ID を単に注入するのではなく、指定された ID に基づいてユーザー モデル インスタンス全体を注入できます。まず、Route::model メソッドを使用して、必要なモデルを指定します:

変数をモデルにバインドします

Route::model(&#39;user&#39;, &#39;User&#39;);

次に、{user} パラメータを含むルートを定義します:

Route::get(&#39;profile/{user}&#39;, function(User $user)
{
//
});

{user} パラメータはすでにバインドされているため、 User モデルに追加すると、User インスタンスがルートに挿入されます。したがって、たとえば、profile/1 のリクエストは ID 1 の User インスタンスを挿入します。

注: このモデル インスタンスがデータベース内に見つからない場合、404 エラーが発生します。

見つからない独自の動作を指定したい場合は、モデルメソッドの 3 番目のパラメータとしてクロージャを渡すことができます:

Route::model(&#39;user&#39;, &#39;User&#39;, function()
{
throw new NotFoundException;
});

独自のメソッドを使用してルートパラメータを処理したい場合は、Route を使用できます: :bind メソッド:

Route::bind(&#39;user&#39;, function($value, $route)
{
return User::where(&#39;name&#39;, $value)->first();
});

404 エラーをトリガーする

ルーティングで 404 エラーを手動でトリガーするには 2 つの方法があります。まず、App::abort メソッドを使用できます:

App::abort(404);

次に、SymfonyComponentHttpKernelExceptionNotFoundHttpException のインスタンスをスローできます。

404 例外の処理とこれらのエラーに対するカスタム応答の使用の詳細については、「エラー」の章を参照してください。

コントローラーへのルーティング

Laravel では、クロージャーだけでなくコントローラークラスにもルーティングでき、さらにリソースコントローラーの作成も可能です

詳細については、コントローラーのドキュメントを参照してください。

Laravel フレームワークのルーティング構成の概要と設定のヒントに関連するその他の記事については、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。