【问题标题】:How to call controllers action & view directly from module in Yii?如何直接从 Yii 中的模块调用控制器动作和视图?
【发布时间】:2013-04-18 16:35:38
【问题描述】:

我正在 Yii 中构建我的第一个模块(又一个 CMS 模块),以了解有关 Yii 及其功能的更多信息。下一步是我想在我所有页面的顶部添加一个“DEV 栏”。在我的布局中,我添加了以下内容:

<?php echo Yii::app()->getModule('cms')->toolbar(); ?>

在我的 CmsModule 文件中,我添加了一个名为 toolbar() 的函数,但我不知道从哪里开始。基本上,我想将我的 Page 模型发送到 CMS 工具栏,然后呈现 CMS 工具栏视图。我的工具栏应该有链接来编辑当前页面元和页面内容。为了遵循 Yii 和 MVC 的最佳实践,如何才能最好地实现?在 CmsModule 中,我会得到 PageModel,如果是,我将如何呈现 CMS 视图?我尝试使用 $this->render(),但出现错误:

 Using $this when not in object context

【问题讨论】:

  • 我不确定您的基本问题是什么(我没有在 Yii 中编写模块的经验),但要解决列出的错误,请尝试使用 Yii::app()-&gt;controller-&gt;render()
  • 感谢您对错误的评论,它不能回答我的问题,但会有所帮助。我的基本问题是关于在模块中显示来自特定控制器的视图的最佳方式?

标签: yii yii-extensions


【解决方案1】:

我不确定您所说的“页面模型”是什么意思,因为这不是 Yii 术语。所以我真的不能帮你。

但我认为你误解了 Yii 中的模块是什么:它就像一个具有自己的控制器、视图甚至模型的子应用程序。仅当您从该模块调用操作时,该模块才处于活动状态。

如果该模块根本不活动,则使用getModule('cms') 获取模块的新实例没有多大意义。相反,您想要的可能是一个可以包含在主布局中的小部件。从该小部件中,您将呈现带有指向您的 CMS 模块的链接的顶部栏菜单。如果您想将 CMS 相关代码放在一起,也可以将该小部件放入模块的 component 目录中。

【讨论】:

  • 好的,由于您的建议,我想我现在知道下一步该去哪里了,让我试一试并报告。
  • 我使用以下代码更新了我的布局:&lt;?php $this-&gt;widget('cms.components.Toolbar', array()); ?&gt; 并将 Toolbar.php 添加到 cms/components。工具栏扩展了 CWidget,并且我已将我的 HTML 添加到 run() 函数中。我希望这就是您要解释的...现在我如何将模型 $page 传递到工具栏,因为 $page 在我的布局中不可用?
  • 听起来不错。您可以将 getter 方法 getPage() 添加到您的控制器,您将在其中返回当前页面模型(无论是什么,无论您检索它 - 可能来自一些 $_GET 参数)。然后您可以通过布局文件中的$this-&gt;page 访问它。然后,您可以将其作为参数传递给您的小部件$this-&gt;widget(...,array('model'=&gt;$this-&gt;page))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-17
  • 1970-01-01
相关资源
最近更新 更多