30
34

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 5 years have passed since last update.

[PHP] composer と spl_autoload の設定

Last updated at Posted at 2013-08-16

前提: 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

30
34
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
30
34

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?