ルーティング(URL・パスの指定)その1〜基本編〜【CakePHP4】

デフォルトの設定

CakePHPではルーティングがデフォルトで設定されており、以下のようにコントローラ名、関数名を参照します。

https://ドメイン/コントローラ名/関数名

具体例

src/Controller/SamplesController.php

<?php
declare(strict_types=1);

namespace App\Controller;
・・・

class SamplesController extends AppController
{
     public function piyo(){

     }
}

templates/Samples/piyo

・・・・・
<h1>piyopiyo</h1>

このようなコントローラ 、テンプレートを用意した場合、下記のURLで表示できます。

https://ドメイン/Samples/piyo

ルーティングを独自指定したい場合

基本的には、デフォルトで問題ないのですが、コントローラ名・関数名とは関係なく、URLを独自指定したい場合があります。

そんな時は、config/route.phpを編集する必要があります。

具体例

$routes->scope(‘/’, function (RouteBuilder $builder) {} の中に 、ルーティング情報を追記します。

具体的な記法は下記をご参照ください。

config/routes.php

$routes->scope('/', function (RouteBuilder $builder) {
    $builder->setExtensions(['json']); 
    
    // Register scoped middleware for in scopes.
    $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([
        'httponly' => true,
    ]));

    /*
     * Apply a middleware to the current route scope.
     * Requires middleware to be registered through `Application::routes()` with `registerMiddleware()`
     */
    $builder->applyMiddleware('csrf');

    //ここに追記していく
    //(例):https:/ドメイン/huga/fooでsamplesControllerのpiyo()を参照したい時。
    $builder->connect('/huga/foo', ['controller' => 'Samples', 'action' => 'piyo']);

    $builder->fallbacks();
});

$builder->connect()の第1引数に利用したいパス構造、第2引数に連想配列形式でController名・関数名を記載してあげればOKです。

ちなみに以下のような設定も可能です。

//SamplesControllerのtop()をトップページとする。
$builder->connect('/', ['controller' => 'Samples', 'action' => 'top']);

//https://ドメイン/hoge/以下のパスが何であっても、全てSamplesControllerのhoge()を参照する。
$builder->connect('/hoge/*, ['controller' => 'Samples', 'action' => 'hoge']);

このように柔軟にURLの指定ができますので是非試してみてください

参照

CakePHP 4.x Strawberry Cookbookルーティング

コメント

タイトルとURLをコピーしました