Yii2自定义组件名称空间
我有一个组件类位于以下路径中: @backend/components/component name/ComponentClass.php 并希望为此类使用默认命名空间: 名称空间后端\组件 我尝试在我的Yii2自定义组件名称空间,yii2,namespaces,aliases,Yii2,Namespaces,Aliases,我有一个组件类位于以下路径中: @backend/components/component name/ComponentClass.php 并希望为此类使用默认命名空间: 名称空间后端\组件 我尝试在我的confing/main.php中设置别名: ... 'aliases' => [ '@backend/components' => '@backend/components/component-name' ], ... require __DIR__ . '/../ven
confing/main.php
中设置别名:
...
'aliases' => [
'@backend/components' => '@backend/components/component-name'
],
...
require __DIR__ . '/../vendor/autoload.php';
require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
但我知道这是错误的决定,因为它破坏了位于后端/组件中的其他类的名称空间逻辑
如何为@backend/components
和@backend/components/component name
中的两个类设置相同的命名空间backend\components
?我建议使用composer autoloader执行此任务-即使为单个类提供多个可能的路径,它也可以正常工作。将composer.json
autoload
部分编辑为类似以下内容:
"autoload": {
"psr-4": {
"backend\\": "backend/",
"backend\\components\\": "backend/components/component-name/",
...
}
},
并在控制台中运行:
composer dump-autoload
确保正在index.php中加载composer autoloader:
...
'aliases' => [
'@backend/components' => '@backend/components/component-name'
],
...
require __DIR__ . '/../vendor/autoload.php';
require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
谢谢,它起作用了。您能解释一下为什么我们需要添加“backend\\”:“backend/”
?它允许对整个后端
命名空间使用Composer autoloader。如果您正在为后端命名空间使用Yii autoloader,您可能不需要它,但Yii autoloader将在Yii 2.1中删除,Composer autoloader更快,因此我建议完全转到Composer autoloader并声明所有命名空间(后端,通用,前端等)在composer.json中
自动加载
。