Yii2:独立于模块中的动作

时间:2014-08-12 20:10:53

标签: php yii namespaces action yii2

我想创建一个这样的目录树:

  • 模型
  • 模块
    • 帮助
      • 控制器
        • 默认
          • IndexAction.php
        • DefaultController.php
      • 的观点
        • 默认
          • 的index.php
      • help.php

所以如果我调用localhost / mysite / web / index.php?r = help / default / index我应该得到索引视图。

所以我用gii创建了一个模块。我的模块类是" app \ modules \ help \ help"。我不得不两次使用帮助,以便将模块放在子目录中。 (这是我无法得到的。为什么不为每个模块创建Yii子目录?)

在下一步中,我创建了独立行动

<?php
namespace app\modules\help\controllers;

use yii\base\Action;

class IndexAction extends Action
{

    public function run()
    {
        $this->controller->render('index');
    }

}

在下一步中,我修改了控制器以使用独立操作

<?php

namespace app\modules\help\controllers;

use yii\web\Controller;

class DefaultController extends Controller
{

    public function actions()
    {
        return [
            'index'    => 'app\modules\help\controllers\default\IndexAction',
        ];
    }

}

如果我现在在浏览器中调用我的视图,则会收到以下错误:

Unknown Class – yii\base\UnknownClassException
Unable to find 'app\modules\help\controllers\default\IndexAction' in file: E:\wamp\www\my_website/modules/help/controllers/default/IndexAction.php. Namespace missing?

但如果我在我的电脑上转到此路径E:\ wamp \ www \ my_website / modules / help / controllers / default /,我会看到IndexAction.php 有人能帮我吗?

独立操作位于控制器的子目录中。所以命名空间应该是

namespace app\modules\help\controllers\default;

但是这导致了这个错误:

 PHP Parse Error – yii\base\ErrorException
 syntax error, unexpected 'default' (T_DEFAULT), expecting identifier (T_STRING)

修改

如果我在IndexAction.php中使用此命名空间app \ modules \ help \ controllers \ IndexAction,则会出现以下错误。即使我在控制器中更改路径,我也会得到unknownClassException:

Unknown Class – yii\base\UnknownClassException
Unable to find 'app\modules\help\controllers\default\IndexAction' in file: E:\wamp\www\my_website/modules/help/controllers/default/IndexAction.php. Namespace missing?

如果我在IndexAction.php中使用此命名空间app \ modules \ help \ controllers \ default,我会得到:

 PHP Parse Error – yii\base\ErrorException
 syntax error, unexpected 'default' (T_DEFAULT), expecting identifier (T_STRING)

2 个答案:

答案 0 :(得分:1)

D.Mill在评论中说。 默认是保留关键字。我不得不重命名目录,它现在工作得很好。

答案 1 :(得分:0)

您使用的是错误的命名空间 用这样的代码替换你的代码(注意反斜杠)

    public function actions()
    {
        return [
            'index'    => '\app\modules\help\controllers\default\IndexAction',
        ];
    }