Yii2 自动加载扩展 类
Yii2 Autoloading Extension Classes
我在 Bitbucket 上创建了一个带有外部模块的私有存储库,并将其添加到项目 composer.json 文件中的依赖项列表中。
问题是,在 "composer install" 之后,我将我的模块下载到 vendor 文件夹中,但它抛出了 ReflectionException:
Class example\news\Module does not exist
外部模块 composer.json :
{
"name": "example/yii2-module-news",
"description": "News",
"type": "yii2-extension",
"keywords": ["yii2", "extension", "news"],
"authors": [
{
"name": "me"
}
],
"autoload": {
"psr-4": {
"example\news\": ""
}
},
"require": {
"2amigos/yii2-ckeditor-widget" : "~1.0",
"kartik-v/yii2-widgets": "*",
"kartik-v/yii2-grid": "@dev",
"kartik-v/yii2-editable": "@dev",
"kartik-v/yii2-krajee-base": "@dev",
"kartik-v/yii2-helpers": "*",
"kartik-v/yii2-mpdf" : "*"
}
}
项目composer.json
"repositories": [
{
"type": "package",
"package": {
"name": "example/yii2-module-news",
"version": "master",
"source": {
"type": "git",
"url": "git@bitbucket.org:example/yii2-module-news.git",
"reference": "master"
}
}
}
]
vendor/composer/autoload_psr4.php 不包含任何关于新外部模块的记录
<?php
// autoload_psr4.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
'yii\twig\' => array($vendorDir . '/yiisoft/yii2-twig'),
'yii\swiftmailer\' => array($vendorDir . '/yiisoft/yii2-swiftmailer'),
'yii\jui\' => array($vendorDir . '/yiisoft/yii2-jui'),
'yii\gii\' => array($vendorDir . '/yiisoft/yii2-gii'),
'yii\faker\' => array($vendorDir . '/yiisoft/yii2-faker'),
'yii\debug\' => array($vendorDir . '/yiisoft/yii2-debug'),
'yii\composer\' => array($vendorDir . '/yiisoft/yii2-composer'),
'yii\codeception\' => array($vendorDir . '/yiisoft/yii2-codeception'),
'yii\bootstrap\' => array($vendorDir . '/yiisoft/yii2-bootstrap'),
'yii\' => array($vendorDir . '/yiisoft/yii2'),
'voskobovich\behaviors\' => array($vendorDir . '/voskobovich/yii2-many-many-behavior/src'),
'skeeks\widget\chosen\' => array($vendorDir . '/skeeks/yii2-widget-chosen'),
'rmrevin\yii\fontawesome\' => array($vendorDir . '/rmrevin/yii2-fontawesome'),
'mihaildev\elfinder\' => array($vendorDir . '/mihaildev/yii2-elfinder'),
'kartik\tree\' => array($vendorDir . '/kartik-v/yii2-tree-manager'),
'kartik\select2\' => array($vendorDir . '/kartik-v/yii2-widget-select2'),
'kartik\growl\' => array($vendorDir . '/kartik-v/yii2-widget-growl'),
'kartik\form\' => array($vendorDir . '/kartik-v/yii2-widget-activeform'),
'kartik\dialog\' => array($vendorDir . '/kartik-v/yii2-dialog'),
'kartik\datetime\' => array($vendorDir . '/kartik-v/yii2-widget-datetimepicker'),
'kartik\daterange\' => array($vendorDir . '/kartik-v/yii2-date-range'),
'kartik\date\' => array($vendorDir . '/kartik-v/yii2-widget-datepicker'),
'kartik\base\' => array($vendorDir . '/kartik-v/yii2-krajee-base'),
'dosamigos\ckeditor\' => array($vendorDir . '/2amigos/yii2-ckeditor-widget/src'),
'dmstr\' => array($vendorDir . '/dmstr/yii2-adminlte-asset'),
'creocoder\nestedsets\' => array($vendorDir . '/creocoder/yii2-nested-sets/src'),
'cebe\markdown\' => array($vendorDir . '/cebe/markdown'),
'Faker\' => array($vendorDir . '/fzaninotto/faker/src/Faker'),
);
composer 存储库配置看起来太复杂了。应该更容易工作,例如:
"repositories": [
{
"type": "git",
"url": "git@bitbucket.org:example/yii2-module-news.git"
},
]
我在 Bitbucket 上创建了一个带有外部模块的私有存储库,并将其添加到项目 composer.json 文件中的依赖项列表中。 问题是,在 "composer install" 之后,我将我的模块下载到 vendor 文件夹中,但它抛出了 ReflectionException:
Class example\news\Module does not exist
外部模块 composer.json :
{
"name": "example/yii2-module-news",
"description": "News",
"type": "yii2-extension",
"keywords": ["yii2", "extension", "news"],
"authors": [
{
"name": "me"
}
],
"autoload": {
"psr-4": {
"example\news\": ""
}
},
"require": {
"2amigos/yii2-ckeditor-widget" : "~1.0",
"kartik-v/yii2-widgets": "*",
"kartik-v/yii2-grid": "@dev",
"kartik-v/yii2-editable": "@dev",
"kartik-v/yii2-krajee-base": "@dev",
"kartik-v/yii2-helpers": "*",
"kartik-v/yii2-mpdf" : "*"
}
}
项目composer.json
"repositories": [
{
"type": "package",
"package": {
"name": "example/yii2-module-news",
"version": "master",
"source": {
"type": "git",
"url": "git@bitbucket.org:example/yii2-module-news.git",
"reference": "master"
}
}
}
]
vendor/composer/autoload_psr4.php 不包含任何关于新外部模块的记录
<?php
// autoload_psr4.php @generated by Composer
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
'yii\twig\' => array($vendorDir . '/yiisoft/yii2-twig'),
'yii\swiftmailer\' => array($vendorDir . '/yiisoft/yii2-swiftmailer'),
'yii\jui\' => array($vendorDir . '/yiisoft/yii2-jui'),
'yii\gii\' => array($vendorDir . '/yiisoft/yii2-gii'),
'yii\faker\' => array($vendorDir . '/yiisoft/yii2-faker'),
'yii\debug\' => array($vendorDir . '/yiisoft/yii2-debug'),
'yii\composer\' => array($vendorDir . '/yiisoft/yii2-composer'),
'yii\codeception\' => array($vendorDir . '/yiisoft/yii2-codeception'),
'yii\bootstrap\' => array($vendorDir . '/yiisoft/yii2-bootstrap'),
'yii\' => array($vendorDir . '/yiisoft/yii2'),
'voskobovich\behaviors\' => array($vendorDir . '/voskobovich/yii2-many-many-behavior/src'),
'skeeks\widget\chosen\' => array($vendorDir . '/skeeks/yii2-widget-chosen'),
'rmrevin\yii\fontawesome\' => array($vendorDir . '/rmrevin/yii2-fontawesome'),
'mihaildev\elfinder\' => array($vendorDir . '/mihaildev/yii2-elfinder'),
'kartik\tree\' => array($vendorDir . '/kartik-v/yii2-tree-manager'),
'kartik\select2\' => array($vendorDir . '/kartik-v/yii2-widget-select2'),
'kartik\growl\' => array($vendorDir . '/kartik-v/yii2-widget-growl'),
'kartik\form\' => array($vendorDir . '/kartik-v/yii2-widget-activeform'),
'kartik\dialog\' => array($vendorDir . '/kartik-v/yii2-dialog'),
'kartik\datetime\' => array($vendorDir . '/kartik-v/yii2-widget-datetimepicker'),
'kartik\daterange\' => array($vendorDir . '/kartik-v/yii2-date-range'),
'kartik\date\' => array($vendorDir . '/kartik-v/yii2-widget-datepicker'),
'kartik\base\' => array($vendorDir . '/kartik-v/yii2-krajee-base'),
'dosamigos\ckeditor\' => array($vendorDir . '/2amigos/yii2-ckeditor-widget/src'),
'dmstr\' => array($vendorDir . '/dmstr/yii2-adminlte-asset'),
'creocoder\nestedsets\' => array($vendorDir . '/creocoder/yii2-nested-sets/src'),
'cebe\markdown\' => array($vendorDir . '/cebe/markdown'),
'Faker\' => array($vendorDir . '/fzaninotto/faker/src/Faker'),
);
composer 存储库配置看起来太复杂了。应该更容易工作,例如:
"repositories": [
{
"type": "git",
"url": "git@bitbucket.org:example/yii2-module-news.git"
},
]