分成两个"模块后,无法解析网站/索引。

时间:2015-01-17 21:48:18

标签: php yii2

我想拆分经理和前端:

根/管理器/控制器/ SiteController.php     

namespace manager\controllers;

use Yii;
use yii\filters\AccessControl;
use yii\web\Controller;
use yii\filters\VerbFilter;
use app\models\LoginForm;
use app\models\ContactForm;

class SiteController extends Controller
{

    public function actionIndex()
    {
        echo 'hallo';
        //return $this->render('index');
    }
}

根/管理/配置/ web.php     

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

$config = [
    'id' => 'basic',
    'basePath' => dirname(__DIR__),
    'controllerNamespace' => 'manager\controllers',
    'bootstrap' => ['log'],
    'modules' => [
        'manager' => [
            'class' => 'manager\Module',
        ],
    ],
    'components' => [
        'request' => [
            // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
            'cookieValidationKey' => 'X',
        ],
        'cache' => [
            'class' => 'yii\caching\FileCache',
        ],
        'user' => [
            'identityClass' => 'app\models\User',
            'enableAutoLogin' => true,
        ],
        'errorHandler' => [
            'errorAction' => 'site/error',
        ],
        'mailer' => [
            'class' => 'yii\swiftmailer\Mailer',
            // send all mails to a file by default. You have to set
            // 'useFileTransport' to false and configure a transport
            // for the mailer to send real emails.
        ],
        'log' => [
            'traceLevel' => YII_DEBUG ? 3 : 0,
            'targets' => [
                [
                    'class' => 'yii\log\FileTarget',
                    'levels' => ['error', 'warning'],
                ],
            ],
        ],
        'db' => require(__DIR__ . '/db.php'),
        'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => [
                '' => 'site/index',
                'fragebogen/erstellung/<id>' => 'questionary/creation',
                'fragebogen/erstellung' => 'questionary/creation',
                'auftraege-importieren' => 'upload/jobs',
                'auftraege-erfolgreich-importiert' => 'upload/jobssuccess',
            ],
        ],
    ],
    'params' => $params,
];

if (YII_ENV_DEV) {
    // configuration adjustments for 'dev' environment
    $config['bootstrap'][] = 'debug';
    $config['modules']['debug'] = 'yii\debug\Module';

    $config['bootstrap'][] = 'gii';
    $config['modules']['gii'] = 'yii\gii\Module';
}

return $config;

根/管理者/网/ index.php的

<?php

// comment out the following two lines when deployed to production
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');

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

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

我得到了这个错误:

exception 'yii\base\InvalidRouteException' with message 'Unable to resolve the request "site/error".' in /kunden/xxx/xxx/vendor/yiisoft/yii2/base/Module.php:461 Stack trace:
#0 /kunden/xxx/xxx/vendor/yiisoft/yii2/web/ErrorHandler.php(80): yii\base\Module->runAction('site/error')
#1 /kunden/xxx/xxx/vendor/yiisoft/yii2/base/ErrorHandler.php(95): yii\web\ErrorHandler->renderException(Object(yii\web\NotFoundHttpException))
#2 [internal function]: yii\base\ErrorHandler->handleException(Object(yii\web\NotFoundHttpException))
#3 {main} Previous exception: exception 'yii\base\InvalidRouteException' with message 'Unable to resolve the request "site/index".' in /kunden/xxx/xxx/vendor/yiisoft/yii2/base/Module.php:461 Stack trace:
#0 /kunden/xxx/xxx/vendor/yiisoft/yii2/web/Application.php(83): yii\base\Module->runAction('site/index', Array)
#1 /kunden/xxx/xxx/vendor/yiisoft/yii2/base/Application.php(375): yii\web\Application->handleRequest(Object(yii\web\Request))
#2 /kunden/xxx/xxx/manager/web/index.php(12): yii\base\Application->run()
#3 {main}

Next exception 'yii\web\NotFoundHttpException' with message 'Unable to resolve the request "site/index".' in /kunden/xxx/xxx/vendor/yiisoft/yii2/web/Application.php:95 Stack trace:
#0 /kunden/xxx/xxx/vendor/yiisoft/yii2/base/Application.php(375): yii\web\Application->handleRequest(Object(yii\web\Request))
#1 /kunden/xxx/xxx/manager/web/index.php(12): yii\base\Application->run()
#2 {main}

enter image description here

7 个答案:

答案 0 :(得分:4)

这个话题解决了吗? 如果没有,请检查common / config / bootstrap.php中的引导程序文件。 如果您的应用程序尝试使用路径别名并且无法解决,则会出现以下异常!

例外&#39; yii \ base \ InvalidRouteException&#39;消息&#39;无法解决请求&#34;网站/错误&#34;。

示例 错误的道路是 Yii :: setAlias(&#39; backend&#39;,dirname(dirname( DIR ))。&#39; backend&#39;); 正确的道路是 Yii :: setAlias(&#39; backend&#39;,dirname(dirname( DIR ))。&#39; / backend&#39;);

答案 1 :(得分:0)

尝试删除网址规则,您可能必须定义默认规则以至少包含模块名称。见Custom URL rules with modules in Yii2

修改
查看我的模块https://github.com/Mihai-P/yii2-core

的安装说明

简而言之,不确定controllerNamespace的作用,你应该删除它。我在这里做了类似的事情:https://github.com/Mihai-P/yii2-core/blob/master/Module.php

之后这个

  

'class'=&gt; '经理\模块'

我认为这不会起作用,管理员命名空间在哪里? Yii如何知道寻找它?我使用composer在自动加载器中添加命名空间,你应该手动执行类似的操作。告诉Yii经理意味着你的经理文件夹,之后它会找到控制器。

这也可能会有所帮助,为该文件夹https://github.com/Mihai-P/yii2-core#note-2

创建一个别名

答案 2 :(得分:0)

我认为可以在Yii2中删除controllerNamespace吗?

您可以在配置中替换它,并使用controllerMap吗?

'controllerMap' => [
    'site' => 'manager\controllers\SiteController',
],

答案 3 :(得分:0)

有一些配置设置对我来说可疑,首先

'modules' => [
    'manager' => [
        'class' => 'manager\Module',
    ],
],

由于您已创建了单独的应用,因此应删除此设置。从你的截图那里 在管理器应用程序中也没有模块。

要进行调试,只需将enablePrettyUrl网址设置为false,然后在工作后将其重新启用 不错的网址。

您可能还需要在bootstrap.php中为manager设置别名,不确定,但值得一试。

从您的错误消息中我说应用程序根本无法加载SiteController, 因为site/error也失败了。

Addon:就个人而言,我建议每个项目只使用一个应用程序,但我知道这是一个有争议的话题。 它只是看着我,就像你那样,并因某种原因切换到两个应用程序。 如果你只想 将自定义主题应用于您的经理,您可以通过module configuration轻松完成 ...

答案 4 :(得分:0)

我猜您的应用程序文件夹没有别名。也许自动加载组件找不到您的控制器文件。您可以在配置文件中添加别名:

\Yii::setAlias(’@manager’, dirname(__FILE__).'/..');

但我认为最好的方法是为管理器创建另一个模块,而不是分成不同的命名空间。

答案 5 :(得分:0)

我观察到此错误通常是由于配置错误或由于类和命名空间的区分大小写的名称而发生的。在我的情况下,错误是由于ii8n组件的配置。我使用以下配置

    'i18n' => [
        'translations' => [
            '*' => [
                'class' => 'yii\i18n\PhpMessageSource',
                'basePath' => '@backend/messages',
                'sourceLanguage' => 'en-US',
                'forceTranslation'=> true,
            ],
        ],
    ],

删除配置

后问题得以解决

答案 6 :(得分:0)

我想您没有经理文件夹的别名。

在您的common\config\bootstrap.php中添加别名。

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

因此您的common\config\bootstrap.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('@manager', dirname(dirname(__DIR__)) . '/manager');