【问题标题】:ReflectionException while trying to add Yii2 module尝试添加 Yii2 模块时出现 ReflectionException
【发布时间】:2021-10-26 18:10:01
【问题描述】:

我正在尝试将 REST api 添加到我现有的经典 Yii2(高级模板)项目中。根据Creating a REST API for Yii2-basic-templateRESTful API in Yii 2 Advanced Application Template 我试图通过向我现有的应用程序添加一个新模块来实现这一点。 这是我现在的应用程序结构:

+ api
  + config
    -main.php
  + modules
    + v1
      + controllers
      -Module.php
  -index.php
  -.htaccess
+ backend
+ common
...

我的 api/config/main.php 文件:

<?php

$params = require(__DIR__ . '/../../backend/config/params.php');

return [
    'id' => 'app-backend-api',
    'basePath' => dirname(__DIR__) . '/..',
    'bootstrap' => ['log'],
    'modules' => [
        'v1' => [
            'class' => 'api\modules\v1\Module'
        ]
    ],
    'components' => [
        'request' => [
            'parsers' => [
                'application/json' => 'yii\web\JsonParser',
            ]
        ],
        'urlManager' => [
            'enablePrettyUrl' => true,
            'enableStrictParsing' => true,
            'showScriptName' => false,
            'rules' => [
                ['class' => 'yii\rest\UrlRule', 'controller' => ['v1/goal']],
            ],
        ],
    ],
    'params' => $params,
];

还有我的 Module.php

<?php
namespace api\modules\v1;

class Module extends \yii\base\Module
{
    public $controllerNamespace = 'api\modules\v1\controllers';

    public function init()
    {
        parent::init();
    }
}

问题是当我尝试导航到 http://my-url/api/v1/goals 时出现以下错误:

Invalid Configuration – yii\base\InvalidConfigException
Failed to instantiate component or class "api\modules\v1\Module".

Caused by: ReflectionException
Class api\modules\v1\Module does not exist
in C:\wamp64\www\agency\vendor\yiisoft\yii2\di\Container.php at line 453

【问题讨论】:

  • 自动加载器似乎有问题。您是否为composer.json 中的api 命名空间定义了自动加载规则?如果没有,你至少应该在 Yii 配置中定义 @api 别名。
  • 非常感谢。添加别名解决了这个问题。
  • 找到你的问题的答案here

标签: php yii2


【解决方案1】:
  1. 创建文件 common/config/aliases.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('api', dirname(dirname(__DIR__)) . '/api');
  1. 将此行添加到文件 api/web/index.php
    require(__DIR__ . '/../../common/config/aliases.php');

【讨论】:

    猜你喜欢
    • 2018-02-01
    • 1970-01-01
    • 2018-03-05
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 2013-10-18
    相关资源
    最近更新 更多