Home >Backend Development >PHP Tutorial >How to configure automatic loading of new directories in Yii2

How to configure automatic loading of new directories in Yii2

WBOY
WBOYOriginal
2016-08-04 09:20:291252browse

目录结构类似这样的:
/

<code>frontend/
common/
backend/
helpers/
    Foo.php
vendor/
</code>

我在项目根目录新建了个目录helpers,里面建立了个类文件Foo.php,namespace helpers;
但是在use helpers\Foo;的时候,提示helpers\Foo没有找到。
请问这是什么原因呢?是不是Yii和autoload没有把一级目录加进自动加载里面?
要怎么解决这个问题?

目前我是把helpers放到common里面

@光灵小鼠 @八宝粥 helpers放一级目录这种设计确实不好,多谢指点。

回复内容:

目录结构类似这样的:
/

<code>frontend/
common/
backend/
helpers/
    Foo.php
vendor/
</code>

我在项目根目录新建了个目录helpers,里面建立了个类文件Foo.php,namespace helpers;
但是在use helpers\Foo;的时候,提示helpers\Foo没有找到。
请问这是什么原因呢?是不是Yii和autoload没有把一级目录加进自动加载里面?
要怎么解决这个问题?

目前我是把helpers放到common里面

@光灵小鼠 @八宝粥 helpers放一级目录这种设计确实不好,多谢指点。

两种途径:

  1. 利用yii2本身的方法,即上面有人提到的setAlias

  2. 利用composer, 然后不要忘记composer dump-autoload

<code>"psr-4": {
    "helpers\\": "helpers/"
}</code>

我也没看到helpersFoo在哪
格式如下

<code>namespace helpers </code>
<code>use userCenter\regist;</code>

在common/config/bootstrap.php文件内配置:

<code><?php
Yii::setAlias('common', dirname(__DIR__));
Yii::setAlias('frontend', dirname(dirname(__DIR__)) . '/frontend');
Yii::setAlias('backend', dirname(dirname(__DIR__)) . '/backend');
Yii::setAlias('console', dirname(dirname(__DIR__)) . '/console');
Yii::setAlias('helpers', dirname(dirname(__DIR__)) . '/helpers');</code>

这种是要配置的。
根目录下小写开头的目录都需要特别的设置,也就是说helpers, frontend, common这些和命名空间不是直接对应的,但是它们之下的文件是对应的。自己看一下文档就了解了。

setAlias()

如果没记错,Yii2 也是利用 composer 实现 psr-4 映射,可参阅 composer 文档。

你用的是Yii2 advanced模版
这个模版有三个应用
backend 代表后台应用
console 代表控制器应用
frontend 代表前台应用
common 存放三个应用公用的类

= = 你在根目录增加helper?表示你要增加一个helper应用?

在common下面增加一个helper文件夹还差不多

@__FresHmaN 讲的不错。

但是我不建议你放在根目录,建议你放在 common 里面

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn