ルーティングは、実際には、リクエストを受信して分析し、適切な場所にリダイレクトすることです。 .htaccessファイルの組み込み対応物のようなもの。 ルーティングが必要な理由は何ですか? さまざまな理由が考えられるため、さまざまなシナリオに合わせてルートを構成する方法について、いくつかの例を挙げます。
ルートはどのように見えますか? 「application /」フォルダーから「bootstrap.php」ファイルを開き、このコメントまでスクロールします。
/** * Set the routes. Each route must have a minimum of a name, a URI and a set of * defaults for the URI. */
以下は次のようになります。
Route::set('default', '(<controller>(/<action>(/<id>)))') ->defaults(array('controller' => 'welcome', 'action' => 'index'));
つまり、すでに構成済みのルートがあります。 それを分解してみましょう:
1.ルートの名前は「デフォルト」です
2. '((/(/)))'-ブラケットは、コントローラー、アクション、およびIDの表示をオプションにします。 また、記号<...>は、このパラメータを山括弧で示された名前の変数に割り当てる必要があることを示しています。
3.デフォルトのコントローラーは「welcome」で、デフォルトのアクションは「index」です。
アドレス「http:// localhost / mykohana3 /」にアクセスすると、コントローラーまたはアクションのいずれも指定されていないことがルーターに表示されます。 彼は試合のためにルートをソートすることについてです。 デフォルトルート(「デフォルト」)があるため、ルーターはそれを選択し、欠落しているコントローラーの代わりに「welcome」を追加し、欠落しているアクションの代わりに「index」を追加します。 つまり、ブラウザに「http:// localhost / mykohana3 /」と入力すると、「http:// localhost / mykohana3 / welcome / index」に似たものになります。
アドレス「http:// localhost / mykohana3 / hmvc /」を入力すると、ルーターはコントローラーが指定されていることを認識しますが、アクションは指定されません。 したがって、デフォルトのアクションとして指定されている「インデックス」を呼び出します。
コントローラーとアクションに加えて、オプションの「id」パラメーターがあります。 「http:// localhost / mykohana3 / hmvc / index / 111」というアドレスに移動すると、このパラメーターのハンドラーを作成しなかったため、新しいものは表示されません。 しかし、2番目のパラメーター「http:// localhost / mykohana3 / hmvc / index / 111/222」を追加すると、エラーが発生します。 これは、ルートに3つのセグメント(コントローラー/アクション/ ID)しか登録されておらず、「/ 222」が4番目であるためです。 これを修正するには、ルートを次のフォームに移動します。
Route::set('default', '(<controller>(/<action>(/<id>(/<overflow>))))', array('overflow' => '.*?')) ->defaults(array('controller' => 'welcome', 'action' => 'index'));
「bootstrap.php」を保存してブラウザを更新すると、エラーは消えます。
追加の配列「array( 'overflow' => '。*?')」を追加しました。 オーバーフロー引数に正規表現を割り当てることにより、スラッシュを含むすべてを受け入れ、オーバーフロー変数としてコントローラーに渡すようにルーターに指示します。 したがって、3番目のセクションの後、ルーターは新しいスラッシュごとに個別のパラメーターとしてテキストを受け入れなくなります。
id引数に戻りましょう。 たとえば、記事のデジタル識別子として使用する場合、ユーザーが何か他のものを転送しようとした場合、エラーを与える価値があります。 この問題を解決する1つの方法は、ルートを作成(この場合は変更)することです。
Route::set('default', '(<controller>(/<action>(/<id>(/<overflow>))))', array('id' => '[[:digit:]]{1,}', 'overflow' => '.*?')) ->defaults(array('controller' => 'welcome', 'action' => 'index'));
ブラウザで「http:// localhost / mykohana3 / hmvc / index / xxx」を開くと、ルートを見つけることができないというエラーが表示されます。これは、本質的に404ページと同じです。 もちろん、コントローラー内でこのようなチェックを配置することができます。これは、ルートの可能な使用例にすぎません。
標準のルートを変更する代わりに、ルートを作成しましょう。 「bootstrap.php」ファイルで、その前に次を追加します。
Route::set('monkeys', 'monkeys(/<action>(/<id>))') ->defaults(array('controller' => 'ko3', 'action' => 'posts'));
ここで、ページ「http:// localhost / mykohana3 / monkeys」を開くと、コントローラー「ko3」のアクション「posts」が呼び出されます。 セクションのリストでは、「サル」という単語は括弧で囲まれていないため、オプションではありません。 このルートは、ルーターがコントローラーの場所で「サル」という単語を見つけたときに呼び出されます。
静的ページの割り当てに使用できるルートの例を次に示します( 非公式Kohana 3.0 Wikiから借用)。
Route::set('static', '<page>', array('page' => 'about|faq|locations')) ->defaults(array('controller' => 'page', 'action' => 'static'));
ルーティングには他の可能性もありますが、この記事では、ルーティングを使用する必要があるほとんどの状況について説明します。
翻訳者注:HabréにはKohana 3.0のルーティングに関する記事がもう1つあります。