やりたいこと
Laravel付属の「composer.json」にPSR-4形式のオートローダーを追加したかったので、
「”名前空間prefix”: “ディレクトリ”」と記述する際の「ディレクトリ」部分を変えてみるとどうなるか試した。
環境
さくらのレンタルサーバ スタンダード
PHP 5.4.29
Laravel 4.2.8
1 2 3 4 5 6 7 8 9 10 |
$ php --version PHP 5.4.29 (cli) (built: Jun 11 2014 18:20:32) Copyright (c) 1997-2014 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies $ php artisan --version Laravel Framework version 4.2.8 $ composer --version Composer version a8adbfeb9fc7861deade782938222714168a22a8 2014-09-05 16:28:50 |
やったこと
Laravelのルートディレクトリを「/LARAVEL-ROOT/」とする。
「/LARAVEL-ROOT/composer.json」の「autoloader psr-4」部分を変更し、「composer dump-autoload」を実行すると「/vendor/composer/autoload_psr4.php」が生成される。
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 42 43 44 45 46 47 48 49 50 51 |
{ "name": "laravel/laravel", "description": "The Laravel Framework.", "keywords": ["framework", "laravel"], "license": "MIT", "type": "project", "repositories": [ { "type": "pear", "url": "http://pear.php.net/" } ], "require": { "laravel/framework": "4.2.*", "maatwebsite/excel": "1.*", "pear-pear.php.net/Mail_mimeDecode" : "*" }, "autoload": { "classmap": [ "app/commands", "app/controllers", "app/models", "app/database/migrations", "app/database/seeds", "app/tests/TestCase.php" ], "psr-4": { "ZZZ\\": "app/zzz", "YYY\\": "vendor/yyy", "XXX\\": "xxx", "WWW\\": "/www" } }, "scripts": { "post-install-cmd": [ "php artisan clear-compiled", "php artisan optimize" ], "post-update-cmd": [ "php artisan clear-compiled", "php artisan optimize" ], "post-create-project-cmd": [ "php artisan key:generate" ] }, "config": { "preferred-install": "dist" }, "minimum-stability": "stable" } |
結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php // autoload_psr4.php @generated by Composer $vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir); return array( 'ZZZ\\' => array($baseDir . '/app/zzz'), 'YYY\\' => array($vendorDir . '/yyy'), 'XXX\\' => array($baseDir . '/xxx'), 'WWW\\' => array('/www'), 'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'), ); |
「vendor」で始めると「$vendorDir」を付けてくれる。
「app」とかその他(xxx)で始めると「$baseDir」を付けてくれる。
「/」で始めるとそのまんま絶対パスになる。