在app config文件中设置Yii2中的别名

时间:2015-03-01 18:01:57

标签: php yii yii2

我正在尝试在alias中设置Yii2,但我在下面的代码中找到Invalid Parameter / Invalid path alias,该代码位于应用配置文件中:

'aliases' => [
    // Set the editor language dir
    '@editor_lang_dir' => '@webroot/scripts/sceditor/languages/',       
],

如果我删除@,则可以使用。

我注意到你可以这样做:

Yii::setAlias('@foobar', '@foo/bar');

...但我更愿意在app配置文件中设置它。这不可能吗?如果是这样,怎么样?

4 个答案:

答案 0 :(得分:12)

Yii2基本申请

要设置内部配置文件,请在$ config array

中写入
'aliases' => [
        '@name1' => 'path/to/path1',
        '@name2' => 'path/to/path2',
    ],

参考:http://www.yiiframework.com/doc-2.0/guide-structure-applications.html

但如上所述here

在您的条目脚本中包含Yii.php文件时,会定义@yii别名。应用应用程序配置时,其余的别名在应用程序构造函数中定义。

如果您需要使用预定义的别名,请编写一个组件并将其链接到config bootstrap array

namespace app\components;


use Yii;
use yii\base\Component;


class Aliases extends Component
{
    public function init() 
    {
       Yii::setAlias('@editor_lang_dir', Yii::getAlias('@webroot').'/scripts/sceditor/languages/');
    }
}

并在配置文件中,将'app \ components \ Aliases'添加到bootstrap数组

    'bootstrap' => [
        'log',        
        'app\components\Aliases',        
],

答案 1 :(得分:7)

config文件夹中创建文件aliases.php。并把它:

Yii::setAlias('webroot', dirname(dirname(__DIR__)) . '/web');
Yii::setAlias('editor_lang_dir', '@webroot/scripts/sceditor/languages/');

web文件中的index.php文件夹中: require(__DIR__ . '/../config/aliases.php');

在:

(new yii\web\Application($config))->run();

如果在视图文件中运行echo

echo Yii::getAlias('@editor_lang_dir');

显示如下:

C:\OpenServer\domains\yii2_basic/web/scripts/sceditor/languages/

答案 2 :(得分:2)

此时

@webroot别名不可用,它是在应用程序引导期间定义的:

https://github.com/yiisoft/yii2/blob/2.0.3/framework/web/Application.php#L60

无需自己定义此别名,您只需使用另一个别名:

'aliases' => [
    // Set the editor language dir
    '@editor_lang_dir' => '@app/web/scripts/sceditor/languages/',
],

答案 3 :(得分:1)

改进@ vitalik_74的回答

你可以把它放在config / web.php中(如果你使用的是基本的yii应用程序,我不确定高级版本中的主配置文件,但同样适用,只需要求在主配置文件上),以便缩短为:

require(__DIR__ . '/aliases.php');