Modules
CodeIgniter 4で、modulesフォルダを設置する場合で、わかったことを書きます。
Info
自分自身の備忘録として、書いています。
まだ十分に把握してなかったり、勘違いしている部分もあるかもしれません。
ご了承ください。
まだ十分に把握してなかったり、勘違いしている部分もあるかもしれません。
ご了承ください。
使用環境
Name | Version |
---|---|
PHP | 7.4.18 |
CodeIgniter | 4.1.2 |
フォルダ構造
/acme /Blog /Config /Controllers /Database /Migrations /Seeds /Helpers /Language /en /Libraries /Models /Views
上記のようなフォルダ構造を想定していますが、acme
はmodules
に置き換えています。
app/Config/Autoload.php
public $psr4 = [ APP_NAMESPACE => APPPATH, // For custom namespace 'Config' => APPPATH . 'Config', 'Acme' => ROOTPATH . 'acme', ];
ドキュメントだと、上記ですが、実際は、下記のようにする必要があります。
public $psr4 = [ APP_NAMESPACE => APPPATH, // For custom app namespace 'Config' => APPPATH . 'Config', 'Modules' => ROOTPATH. 'modules', 'Modules/Blog' => ROOTPATH. 'modules/Blog' ];
modules/Blog/Config/Routes.php
を読ませるためには、Modules(Acme)
の行だけでなく、Modules/Blog
の行も要ります。
modules/Blog/Config/Routes.php
<?php namespace Modules\Blog\Config; $routes->get('blog', 'Modules\Blog\Controllers\Blog::index');
app/Config/Routes.php
変更箇所は、2箇所です。
//$routes->setDefaultNamespace('App\Controllers'); $routes->get('/', 'App\Controllers\Home::index');
php spark routes
php spark routes
をした結果が、下記の通りです。
+--------+----------------------------+------------------------------------------------+ | Method | Route | Handler | +--------+----------------------------+------------------------------------------------+ | GET | / | \App\Controllers\Home::index | | GET | blog | \Modules\Blog\Controllers\Blog::index | | CLI | migrations/([^/]+)/([^/]+) | \CodeIgniter\Commands\MigrationsCommand::$1/$2 | | CLI | migrations/([^/]+) | \CodeIgniter\Commands\MigrationsCommand::$1 | | CLI | migrations | \CodeIgniter\Commands\MigrationsCommand::index | | CLI | ci(.*) | \CodeIgniter\CLI\CommandRunner::index/$1 | +--------+----------------------------+------------------------------------------------+
試してダメだったこと
Laravel Modules
を思い出して、composer.json
に、記述する方法を試してみました。
下記の通り、追記して、composer dump-autoload
をしましたが、ダメでした。
"autoload": { "psr-4": { "App\\": "app", "Modules\\": "modules", "Config\\": "app/Config" },