我用Composer設置類的自動加載沒有任何問題,我已閱讀並觀看了數百萬的參考資料在這一點&不知何故,我似乎仍然錯過了一些至關重要的東西。作曲家自動加載和PHPUnit
一些快速的版本信息:
- PHP - v5.6.17
- 作曲家 - V1.0-DEV(alpha11,全球安裝)
- PHPUnit的 - v4.2.6
- 氣質 - 失意
項目佈局相對簡單:
.
├── composer.json
├── framework
│ ├── classes
│ │ ├── Test1.php
│ ├── config
│ │ ├── Test2.php
│ ├── financial.html
│ ├── form.html
│ ├── index.php
│ ├── models
│ │ ├── Base.php
│ ├── sample.html
│ └── services
│ └── validate.service.php
├── phpunit.xml
├── test
│ └── FormTest.php
└── vendor
├── autoload.php
├── composer
│ ├── autoload_classmap.php
│ ├── autoload_files.php
│ ├── autoload_namespaces.php
│ ├── autoload_psr4.php
│ ├── autoload_real.php
│ ├── ClassLoader.php
│ ├── installed.json
│ └── LICENSE
└── constants.php
「composer.json」 目前包含以下內容:
{
"name": "testframework",
"require": {
"PHP": ">=5.6.17"
},
"autoload": {
"psr-4": {
"Config\\": "framework/config/",
"Classes\\": "framework/classes/",
"Models\\": "framework/models/"
},
"files": [
"vendor/constants.php"
]
}
}
每當我修改的目錄結構,重命名類或修改 「composer.json」 我跑:
% composer validate (only when modifying "composer.json")
% composer dump-autoload -o
我打算從「框架」中的「類」,「配置」和「模型」文件夾自動加載所有類; 「index.php」目前實現了「framework/models/Base.php」,如下所示。
<?php
require_once(dirname(__DIR__) . '/vendor/autoload.php');
use Models\Base;
$derp = new BaseModel();
?>
我已經驗證了以上幾點,以正確的位置&回報: 「/var/www/testproject/vendor/autoload.php」
Base.php包含以下腳本:
<?php namespace Models;
class BaseModel {
public $submitAction = null;
protected $complete;
public function __construct() {}
/**
* Expose
* Exposes the error code names for external processing.
*
* @return An array containing all error code names in this object.
*/
public static function Expose() {
$reflector = new ReflectionClass('ErrorCodes');
return $reflector->getConstants();
}
}
我已經經歷了每個我可以想到的命名空間的變換,一直在無休止地修改「composer.json」,根據文檔添加和刪除段,純粹使用classmap(它沒有工作),測試「PSR-0」(也沒有工作),使用更大的錘子(也沒有工作)。
顯然我在做東西可怕的錯誤,我只是似乎無法解開什麼;任何人都可以看到我誤入歧途的地方嗎?
非常感謝, N00B
編輯:巨大的監督,在「供應商/作曲家」目錄包含以下有關作曲家的自動加載。
「autoload_classmap.php」:
<?php
// autoload_classmap.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
'Models\\BaseModel' => $baseDir . '/framework/models/Base.php',
);
「autoload_files.php」:
<?php
// autoload_files.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
'a9da57e70f975fe4a3c7dad63939dcd8' => $vendorDir . '/constants.php',
);
和「autoload_psr4。PHP「:
<?php
// autoload_psr4.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
'Models\\' => array($baseDir . '/framework/models'),
'Config\\' => array($baseDir . '/framework/config'),
'Classes\\' => array($baseDir . '/framework/classes'),
);
我看到的錯誤是,從PHP:
Fatal error: Class 'BaseModel' not found in /var/www/testproject/framework/index.php on line 8
,並從PHPUnit的:
user% phpunit PHPUnit 4.2.6 by Sebastian Bergmann.
Configuration read from /var/www/testproject/phpunit.xml
PHP Fatal error: Class 'BaseModel' not found in /var/www/testproject/test/FormTest.php on line 6
$ *?£&* +£&$%^ !!!!!謝謝,我知道這將會是一件非常愚蠢的事情。我發誓我已經試過這個了... 我知道關於-o標誌,聽說我不需要運行autodump命令,每次添加一個新類時都是新聞(如果標誌是省略)不過,所以再次感謝你,我會玩一玩。在過去的幾天中,我一直在通過php-fig.org進行搜索,有時你的手掌比無盡的文檔更有用。 –