【问题标题】:DefaultController in Yii. Question of namingYii 中的默认控制器。命名问题
【发布时间】:2011-10-05 08:37:54
【问题描述】:

我用 gii 为 Yii 框架创建了两个模块。每个模块都创建自己的默认控制器类,称为“DefaultController”。

但我认为它是错误的,我认为应该是像 Zend 框架一样的“Module1_DefaultController”和“Module2_DefaultController”。

这是真的吗? 如果是,如何重命名控制器?

【问题讨论】:

    标签: yii modular


    【解决方案1】:

    除非你从那个模块请求一些动作,否则 Yii 不会包含 DefaultController 类的文件。这将防止重复的类名错误(我猜你怀疑),因为不能同时调用两个模块操作(这是设计使然)。 p>

    【讨论】:

    • 当我调用另一个模块的动作时,会导致类名重复错误。这正是我的问题。
    • 也许你可以解释为什么你需要在另一个模块(B)的动作中调用模块(A)的动作?或者您可以从其中一个模块中更改控制器类的名称之一(不要忘记也更改文件名)。请记住,这会将更改后控制器的路由从<modulename>/default 更改为<modulename>/<newcontrollername>
    • 例如我需要在首页渲染最新消息和最新产品,我应该同时导入 module1/defaultController 和 module2/defaultController 来使用两个动作 latestnews 和 latestproduct
    • 我认为,您要尝试做的事情是在组件中完成(如果您愿意,可以在模块中完成)。控制器主要用于渲染整个页面(或者至少我是这样做的)。
    • 请解释你最后的评论,我想这就是我想要的
    【解决方案2】:

    DefaultController 只会在您调用 yoursite/yourmodule 时被调用。您无需更改其名称即可使其正常工作。

    不重命名控制器的原因是您在访问 yoursite/yourmodule 时实际上并没有调用控制器本身。您将进入模块根目录并获取默认控制器。这就是为什么你需要定义 module inside config: 让 Yii 知道它需要寻找一个模块而不是一个控制器。

    当然,你可以在这个模块中创建更多的控制器。

    【讨论】:

      【解决方案3】:

      Yii 创建的 DefaultController 并没有错,因为当你从另一个模块或类中导入它时,你会像 Java 中的包一样导入它。应该是这样的

      Yii::import('application.modules.module1.controllers.DefaultController');
      

      我认为 Yii 在packageclass 的设计上与Java 类似。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-29
        相关资源
        最近更新 更多