2019-01-09 18:26:19 146次浏览 3条回答 0 悬赏 10 金钱

根目录下创建一个 components 文件夹 4.png

命名空间 直接写 components,访问不到该类, 2.png

是怎么回事?或者说命名空间怎么写,麻烦大佬给讲一下,谢谢 3.png

有没有大佬知道,给说一下,谢了!

亿速云

最佳答案

  • 青山淼淼 发布于 2019-01-10 11:08 举报

    在你的 common/config/bootstrap.php 加入这一句试试

    Yii::setAlias('@components',dirname(dirname(__DIR__)) . '/components');
    

    以下测试:

    Yii::setAlias('@test',dirname(dirname(__DIR__)) . '/test');//这是我测试的数据。
    

    test/test.php 文件

    <?php
    /**
     * Created by PhpStorm.
     * User: Sesame
     * Date: 2019/1/10
     * Time: 10:59
     */
    namespace test ;
    class test
    {
        public function testAction()
        {
            return "测试数据";
        }
    }
    

    在其他控制器调用(在控制器中 use test\test;):

    $str = (new test())->testAction();
    var_dump($str);
    die;
    

    打印结果 string(12) "测试数据"
    不是很会这个排版。看着有点不舒服,你稍微看仔细点 #笑哭。

    2 条回复
    回复于 2019-01-10 14:27 回复

    是这个问题,加入后可以正常访问了,谢谢了大佬!这个bootstrap.php文件,一般多是什么情况下使用,大佬有时间可以给讲一下

    回复于 2019-01-10 14:59 回复

    https://www.yiichina.com/doc/guide/2.0/concept-aliases#aliases
    具体的你可以看看,我的理解就是设置别名了。每新增一个模块或公共的文件夹我一般都会这样声明下

    , 觉得很赞
  • 回答于 2019-01-09 19:04 举报

    首先,我建议能贴代码不要贴图片。

    你的问题是 namespace 不统一,全改成 components 就可以了。

    7 条回复
    回复于 2019-01-09 19:09 回复

    大佬,我是怕目录结构没有,不好说命名空间,所以出图了,新手,下次发代码
    之前我也是所以的命名空间和目录结构是一致的,就是不行,

    namespace components;
    
    use yii\base\Action;
    
    class HelloAction extends Action
    {
        public function run(){
            return "hello world!";
        }
    }
    
    回复于 2019-01-09 19:11 回复

    大佬,命名空间和目录结构都是一样的,还是提示该类找不到,如果把该component文件夹移动到common目录下,命名空间改成common的命名空间就可以正常访问到,所以我再考虑是不是根目录下自己建的文件夹还需要其他的操作

    回复于 2019-01-09 19:17 回复

    那个 HelloAction 的命名空间是 namespace components; ,后期放到 common 里面就可以找到该类了,提问这个问题的时候忘记修改回去错误的了

    回复于 2019-01-09 20:21 回复

    components 放到 common 里面不也可以吗?namespace common\components

    回复于 2019-01-09 21:48 回复

    可以,要统一命名空间

    回复于 2019-01-10 08:47 回复

    放到common里面是可以的,我试过了,我在想为什么放到根目录是不行的

    回复于 2019-01-10 08:48 回复

    试过了,不行的

  • 回答于 2019-01-15 17:31 举报

    建议改用composer的psr-4加载,新版本的yii已经抛弃通过alias来自动加载了

    1 条回复
    回复于 2019-01-16 09:27 回复

    学习了,谢谢

您需要登录后才可以回答。登录 | 立即注册
零零零
见习主管

零零零

注册时间:2018-07-26
最后登录:1天前
在线时长:7小时13分
  • 粉丝0
  • 金钱290
  • 威望0
  • 积分360

热门问题