前提: composer と spl_autoload を理解している
どのように指定して、自動でファイルを読み込むか?
ファイルの置き場所: /User/hogeo/my_app/composer.json
composer.json の中に以下の設定がある場合
"autoload": {
"psr-0": {"AppName": "src/"}
}
/User/hogeo/my_app/src/AppName/ 以下がnamespace
namespace AppName\Controller;
class IndexController
{
}
上記のファイル場合、以下にあること
/User/hogeo/my_app/src/AppName/Controller/IndexController.php
注意点
composer.json を変更したらアップデートしよう
php composer.phar update
上記を行うと以下のファイルが更新される
vendor/composer/autoload_namespaces.php
上記ファイルを見ると、どこを autoload するかがわかる
<?php
// autoload_namespaces.php generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
'Twig_' => array($vendorDir . '/twig/twig/lib'),
'AppName' => array($baseDir . '/src'),
);
その他の autoload 方法
以下のように読み込むこともできるらしい
$loader = require 'vendor/autoload.php';
$loader->add('AppName', __DIR__.'/../src/');
何が登録されているか?の確認方法
$autoload_list_array = spl_autoload_functions();
print_r($autoload_list_array);
バックスペース問題
app/Model/User.php に以下のネームスペースがあると
namespace AppName;
spl_autoload_register(DIR . 'app//Model/'*.php');
すると
ネームスペースありで
Tips
spl_autoload_register() の第三引数に true を入れると、スタックの一番上に入れてくれるので、よく使われるものはスタックの上の方に登録
参考にしたURL
- Composerでの読み方の回答
php - Using Composers Autoload - Stack Overflow - PSR-0 に従ってファイルを配置しないと読まないよ
PSR-0(日本語) - 仕様(英語)
Composer