0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

CakePHP4のデフォルトルーティングを無効にする

Posted at

CakePHPの特徴の一つに、Controller名・action名・テンプレートファイル名を規約に沿った名前に統一することで、個別にルーティングを定義しなくても「/Controller名/action名」のURLに該当アクションを紐付けできる機能があります。(以下、デフォルトルーティングと書きます)
できるだけルーティングを書きたくない時には便利なのですが、画面表示が必要ないアクションでもルーティングが有効になってしまったり、URL構成からCakePHP製であることを推測されやすいため、無効化したい場合もあります。

CakePHP4のデフォルトルーティングは、routes.phpで使われているDashedRouteクラスの機能によるものです。
DashedRouteクラスではなく、Routeクラスを使用するように変更することで無効化できます。

CakePHP初期状態のルーティング一覧
...cakephp>bin/cake routes
+---------------------+--------------------------+--------------------------------------------------------------------+
| Route name          | URI template             | Defaults                                                           |
+---------------------+--------------------------+--------------------------------------------------------------------+
| pages:display       | /pages/*                 | {"action":"display","controller":"Pages","plugin":null}            |
| pages:display       | /                        | {"action":"display","controller":"Pages","0":"home","plugin":null} |
| _controller:index   | /{controller}            | {"action":"index","plugin":null}                                   |
| _controller:_action | /{controller}/{action}/* | {"action":"index","plugin":null}                                   |
+---------------------+--------------------------+--------------------------------------------------------------------+
// 下2行がDashedRouteのデフォルトルーティング用定義
// DebugKit用のルーティングは除外しています。

routes.phpの定義内容から、以下の3行を削除します。

config/routes.php
<?php

- use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;

- $routes->setRouteClass(DashedRoute::class);

$routes->scope('/', function (RouteBuilder $builder) {
    $builder->connect('/', ['controller' => 'Pages', 'action' => 'display', 'home']);
    $builder->connect('/pages/*', 'Pages::display');

-   $builder->fallbacks();
});
削除後のルーティング一覧
...cakephp>bin/cake routes
+---------------+--------------+--------------------------------------------------------------------+
| Route name    | URI template | Defaults                                                           |
+---------------+--------------+--------------------------------------------------------------------+
| pages:display | /pages/*     | {"action":"display","controller":"Pages","plugin":null}            |
| pages:display | /            | {"action":"display","controller":"Pages","0":"home","plugin":null} |
+---------------+--------------+--------------------------------------------------------------------+
// デフォルトルーティング用の定義が無くなります。

明示的にルーティングを定義しているURLへは、引き続きアクセスできます。
元々デフォルトルーティングで処理していたURLは、ルーティング定義が無いので404 Not Foundになります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?