cakephp3でControllerを別階層で管理したい時のTips

要はApp::buildメソッドがなくなってしまったのでそれの代替案です。 今回はAPIで使用するControllerを別階層で管理したい時を想定して、 src/Controller/Api 以下に存在するControllerを読み込むようにした時のサンプルです。

1.Composer.jsonを編集

以下のようにComposer.jsonを編集してあげましょう。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
{
    "name": "cakephp/app",
    "description": "CakePHP skeleton app",
    "homepage": "http://cakephp.org",
    "type": "project",
    "license": "MIT",
    "require": {
        "php": ">=5.4.16",
        "cakephp/cakephp": "~3.0",
        "mobiledetect/mobiledetectlib": "2.*",
        "cakephp/migrations": "~1.0",
        "cakephp/plugin-installer": "*",
    },
    "require-dev": {
        "psy/psysh": "@stable",
        "cakephp/debug_kit": "~3.0",
        "cakephp/bake": "~1.0"
    },
    "suggest": {
        "phpunit/phpunit": "Allows automated tests to be run without system-wide install.",
        "cakephp/cakephp-codesniffer": "Allows to check the code against the coding standards used in CakePHP."
    },
    "autoload": {
        "psr-4": {
            "App\\": "src",
            "App\\Controller\\": "src/Controller/Api" // <=この部分を追加
        }
    },
    "autoload-dev": {
        "psr-4": {
            "App\\Test\\": "tests",
            "Cake\\Test\\": "./vendor/cakephp/cakephp/tests"
        }
    },
    "scripts": {
        "post-install-cmd": "App\\Console\\Installer::postInstall",
        "post-autoload-dump": "Cake\\Composer\\Installer\\PluginInstaller::postAutoloadDump"
    },
    "minimum-stability": "dev",
    "prefer-stable": true
}

編集が完了したら、dump-autoloadしてあげて、オートローダーを更新しましょう。

1
composer dump-autoload

これだけで、src/Controller/Api以下にあるファイルもControllerとして認識されるようです。 その他のViewやModelを別階層で管理したい時に関してもこの対応法で問題ないかと思います。

ちゃんとComposerの勉強しないと。。。