CakePHP
cakephp3

CakePHP3でフロントとバックエンドでControllerとTemplateをフォルダ分けするための設定

More than 1 year has passed since last update.
cake version 3.3.11

cakePHP3で下記のようにフロントとバックエンドでController等を分けたいことありますよね?

 src/
  Controller/
   Front/
    ItemsController.php
    ...
   Admin/
    UsersController.php
    ...
  Template/
   Front/
    Items/index.ctp
    ...
   Admin/
    UsersController.php
    ...

cakephp3では、routesを修正することでできます。
※コメント文は削除してます。

config/routes.php
<?php
use Cake\Core\Plugin;
use Cake\Routing\RouteBuilder;
use Cake\Routing\Router;
use Cake\Routing\Route\DashedRoute;

Router::defaultRouteClass(DashedRoute::class);

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

    $routes->connect('/pages/*', ['controller' => 'Pages', 'action' => 'display']);

    // 管理トップ用 ↓追加
    $routes->connect('/admin', ['controller' => 'Users', 'action' => 'index', 'prefix' => 'admin']);

    // これはコメントアウトする ↓修正
    //$routes->fallbacks(DashedRoute::class);

    // フロントは、Front/ へ ↓追加
    $routes->connect('/:controller', ['action' => 'index', 'prefix' => 'front'], ['routeClass' => 'DashedRoute']);
    $routes->connect('/:controller/:action/*', ['prefix' => 'front'], ['routeClass' => 'DashedRoute']);
});

// 管理用(トップ以外)ルーティング ↓追加
Router::prefix('admin', function ($routes) {
    $routes->fallbacks('DashedRoute');
});

Plugin::routes();