【问题标题】:Yii2 module (not under /vendor folder) class not found in config/main.phpYii2 模块(不在 /vendor 文件夹下)类在 config/main.php 中找不到
【发布时间】:2017-04-27 01:29:38
【问题描述】:

我在文件夹 api 下创建了一个模块(它本身与 yii2 高级应用程序中的后端和前端相同级别)。

文件夹结构:

API
-- 常见
------ 控制器
------ 型号
-- 配置
-- 模块
------ v1
---------- 控制器
---------- 型号
-- 运行时
-- 测试
-- 网络

在 api/config/main.php:

return [
'id' => 'app-api',
'basePath' => dirname(__DIR__),    
'bootstrap' => ['log'],
'modules' => [
    'v1' => [
        'basePath' => '@app/modules/v1',
        'class' => 'api\modules\v1\Module'
    ]
],

我得到错误:

反射异常

类 api\modules\v1\Module 不存在

课程肯定在那里。

我已经运行了 composer dumpautoload(没有错误)。

config/main.php 中的urlManager:

'urlManager' => [
        'enablePrettyUrl' => true,
        'enableStrictParsing' => true,
        'showScriptName' => false,
        'rules' => [
              'v1/site/index' => 'v1/site/index', //module/controller/action
        ],        
    ]

非常感谢任何帮助,

谢谢

【问题讨论】:

  • 检查Module.php 文件中的命名空间是否正确。还要仔细检查路径是否区分大小写。
  • 您不需要basePath 选项,只需'v1' => [ 'class' => 'api\modules\v1\Module', ],
  • 您是否为 '@app' 设置了正确的别名?我的意思是对于 API,它应该指向 api 目录。
  • Bizley - Module.php 的命名空间:命名空间 api\modules\v1; (似乎可以?)Yupik - 我已经删除了 basePath 条目,仍然得到相同的错误 witzawitz - 嗯,不认为你需要显式设置 @app (这不是由框架自动确定的吗?)如果没有,在哪里设置它?仍然得到同样的错误...... :(
  • 顺便说一句,这是我所基于的项目:github.com/deerawan/yii2-advanced-api 我基本上复制了 api 文件夹并进行了一些小改动以适应我的系统。

标签: reflection module yii2


【解决方案1】:

好的,明白了: 在 common/config/bootstrap.php 中,添加:

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

然后在 config/main.php 中使用:

'modules' => [
        'v1' => [
            'basePath' => '@api/modules/v1',
            'class' => 'api\modules\v1\Module'
        ]
    ],

这似乎有效,谢谢大家

【讨论】:

  • 或在 config.php 'aliases' => [ '@api' => dirname(dirname(__DIR__)) . '/api' ], 和 ``` 'basePath' => '@api/modules/v1', ``` 不需要
【解决方案2】:

谢谢,gvanto。还要检查您是否在 \api\web\index.php 中包含 common/config/bootstrap.php 。喜欢这里

<?php
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');

require(__DIR__ . '/../../vendor/autoload.php');
require(__DIR__ . '/../../vendor/yiisoft/yii2/Yii.php');
require (__DIR__ . '/../../common/config/bootstrap.php');

$config = yii\helpers\ArrayHelper::merge(
require(__DIR__ . '/../../common/config/main.php'),
require(__DIR__ . '/../../common/config/main-local.php'),
require(__DIR__ . '/../config/main.php'),
require(__DIR__ . '/../config/main-local.php')
);

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

那是我的错误。也许它会帮助某人

【讨论】:

    猜你喜欢
    • 2018-02-07
    • 2021-12-24
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    • 2021-08-27
    • 2019-10-08
    • 2021-04-20
    • 2014-09-03
    相关资源
    最近更新 更多