デフォルトの設定
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:ルーティング
コメント