Yii 2:无法在扩展中找到类';yii2管理员';


Yii 2: Unable to find a class into the extension 'yii2-admin'

Extension的Github项目:https://github.com/mdmsoft/yii2-admin

我使用的是yii2的高级模板,所以我将backendfrontendcommon文件夹都放入了一个advanced文件夹中。

高级文件夹本身在CCD_ 5文件夹的同一级别上。

我有其他的扩展,一切都在工作

然后我安装了yii2管理员由作曲家

php composer.phar require mdmsoft/yii2-admin "*"

安装工作良好。

在供应商文件夹中,我现在有一个mdmsoft文件夹,里面有yii2-admin子文件夹

这是v endor/yiisoft/extensions.php的实际内容(由composer安装修改,我没有手动触摸)

<?php
$vendorDir = dirname(__DIR__);
return array (
  'yiisoft/yii2-jui' => 
  array (
    'name' => 'yiisoft/yii2-jui',
    'version' => '2.0.0.0',
    'alias' => 
    array (
      '@yii/jui' => $vendorDir . '/yiisoft/yii2-jui',
    ),
  ),
  'mdmsoft/yii2-admin' => 
  array (
    'name' => 'mdmsoft/yii2-admin',
    'version' => '1.0.2.0',
    'alias' => 
    array (
      '@mdm/admin' => $vendorDir . '/mdmsoft/yii2-admin',
    ),
  ),
);

我将此配置添加到common/config/main.php

<?php
return [
    ...
    'components' => [
        ...
        'authManager' => [
            'class' => 'yii'rbac'DbManager', // or use 'yii'rbac'PhpManager'
        ],
    ],
];

这些配置添加到backend/config/main.php

'modules' => [
    'admin' => [
        'class' => 'mdm'admin'Module',
    ]
],
'components' => [
    'as access' => [
        'class' => 'mdm'admin'components'AccessControl',
        'allowActions' => [
            'admin/*', // add or remove allowed actions to this list
        ]
    ],
],

(我在每个代码块中都省略了无用的代码)

我还启用了漂亮的url。它正在发挥作用。

完成错误堆栈

2014-11-06 17:05:49 [127.0.0.1][-][-][error][ReflectionException] exception 'ReflectionException' with message 'Class mdm'admin'Module does not exist' in C:'xampp'htdocs'advanced'vendor'yiisoft'yii2'di'Container.php:408
Stack trace:
#0 C:'xampp'htdocs'advanced'vendor'yiisoft'yii2'di'Container.php(408): ReflectionClass->__construct('mdm''admin''Modul...')
#1 C:'xampp'htdocs'advanced'vendor'yiisoft'yii2'di'Container.php(354): yii'di'Container->getDependencies('mdm''admin''Modul...')
#2 C:'xampp'htdocs'advanced'vendor'yiisoft'yii2'di'Container.php(147): yii'di'Container->build('mdm''admin''Modul...', Array, Array)
#3 C:'xampp'htdocs'advanced'vendor'yiisoft'yii2'BaseYii.php(344): yii'di'Container->get('mdm''admin''Modul...', Array, Array)
#4 C:'xampp'htdocs'advanced'vendor'yiisoft'yii2'base'Module.php(354): yii'BaseYii::createObject(Array, Array)
#5 C:'xampp'htdocs'advanced'vendor'yiisoft'yii2'base'Module.php(511): yii'base'Module->getModule('admin')
#6 C:'xampp'htdocs'advanced'vendor'yiisoft'yii2'base'Module.php(449): yii'base'Module->createController('admin/route')
#7 C:'xampp'htdocs'advanced'vendor'yiisoft'yii2'web'Application.php(83): yii'base'Module->runAction('admin/route', Array)
#8 C:'xampp'htdocs'advanced'vendor'yiisoft'yii2'base'Application.php(375): yii'web'Application->handleRequest(Object(yii'web'Request))
#9 C:'xampp'htdocs'advanced'backend'web'index.php(18): yii'base'Application->run()
#10 {main}

问题

如果我在/admin打开我的后端,我会得到这个异常

反射异常类mdm''admin''Module不存在

这是我的第一个Yii2应用程序,所以我不知道问题出在哪里,也不知道如何调试它

编辑1

我检查了C:''examplep''htdocs''vendor''mdmsoft''yii2-admin''Module.php,在其内容中有Module类定义

class Module extends 'yii'base'Module

编辑2

我的第一个错误是asAccess被放入components数组。但它必须在它之外,处于同一水平

现在错误已经改变:

Class mdm'admin'components'AccessControl does not exist

首先:这是错误的

'components' => [
    'cache' => [
        'class' => 'yii'caching'FileCache',
    ],
    'as access' => [
        'class' => 'mdm'admin'components'AccessControl',
        'allowActions' => [
            // 'admin/*', // add or remove allowed actions to this list
        ]
    ],
],

必须如下:

'components' => [
    'cache' => [
        'class' => 'yii'caching'FileCache',
    ],
],
'as access' => [
    'class' => 'mdm'admin'components'AccessControl',
    'allowActions' => [
        // 'admin/*', // add or remove allowed actions to this list
    ]
],

第二次:必须运行此命令

php composer.phar require mdmsoft/yii2-admin "*"

从应用程序根目录(htdocs'advanced)中,而不是从执行yii安装的位置(您在htdocs中)。只有这样才能将yii2管理员安装到您的应用中

第三:控制台没有authManager不是真的!如果你必须使用rbac,要简单地执行默认的yii2迁移,你必须将其配置到控制台应用程序中。因此,我的建议是:将authManager配置到控制台中,并将其他内容配置到前端和/或需要它的后端中

第四个:您无法从后端管理前端路由,因此您需要启用该模块,甚至进入前端

"我将这些配置添加到common/config/main.php"
注意:不要放在commonfrontendbackend。。。控制台应用程序没有用户组件,也不需要访问控制。

尝试在'modules' 之前的backend/config/main中添加此内容

'vendorPath' => dirname(dirname(__DIR__)) . '/vendor',
'extensions' => require(__DIR__ . '/../../vendor/yiisoft/extensions.php'),
'components' => [
    'cache' => [
        'class' => 'yii'caching'FileCache',
    ],
    'authManager' => [
        'class' => 'yii'rbac'DbManager',
    ],
],

我不得不假设整个事情已经提前返回,所以整个代码就像:

return [
    'vendorPath' => dirname(dirname(__DIR__)) . '/vendor',
    'extensions' => require(__DIR__ . '/../../vendor/yiisoft/extensions.php'),
    'components' => [
        'cache' => [
            'class' => 'yii'caching'FileCache',
        ],
        'authManager' => [
            'class' => 'yii'rbac'DbManager', 
        ],
    ],
    'modules'=>[
        'admin' => [
            'class' => 'mdm'admin'Module',
        ],
    ],
    'as access' => [
        'class' => 'mdm'admin'components'AccessControl',
        'allowActions' => [
            'admin/*',
        ],
    ],
];

希望这有帮助:D