Yii2自定义组件名称空间

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

我有一个组件类位于以下路径中:

@backend/components/component name/ComponentClass.php

并希望为此类使用默认命名空间:

名称空间后端\组件

我尝试在我的
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中
自动加载