【问题标题】:yii widget render partial view of another controlleryii 小部件渲染另一个控制器的部分视图
【发布时间】:2014-07-09 06:38:45
【问题描述】:

我需要为我的 yii 驱动项目中的不同模块创建通用对话框小部件,其表单将自动序列化并传递给控制器​​操作以进行添加/更新操作。

如果我在我的小部件的重载 run() 或 init() 方法中调用渲染部分方法并使用 html 表单向他传递自定义视图路径,这是一个好习惯吗(此表单将在 dialog-btn 之后显示在模态对话框窗口中点击相应的操作)?

我的小部件路径:

/protected/components/widgets/DialogFormWidget.php

我的表单路径:

/protected/modules/module/controller/views/forms/submittable_html_form.php

【问题讨论】:

    标签: php yii


    【解决方案1】:

    一起去

     $this->renderPartial('application.modules.controllers.views.forms.submittable_html_form');
    

    更新:

    在上面的代码中,$this 指的是控制器,如果你想从一个小部件内部使用控制器 renderPartial,你必须像 $this->controller->renderPartial ( 那样访问它

    【讨论】:

    • 感谢@tinybyte,但使用此代码时出现错误:{class} 及其行为没有名为 {name} 的方法或闭包。可能是另一种方式?
    • @tinybyte 是对的,用全别名就好了,不要只是复制粘贴代码,这里有一些错误,请自行查找。
    • $this->controller->renderPartial ,现在可以了。谢谢! (是的,我更改了路径以更正我的环境,问题不在于那个,但我真的不能直接使用小部件方法中的 $this->renderPartial ...我使用 1.1.14
    • Yii::app()->controller->renderPartial... 呢?
    【解决方案2】:

    即使您可以使用视图文件的路径从其他控制器 ($this->renderPartial('application.views.controller.view', []) 访问它,或者您的视图在系统上的任何位置的路径),这不是一个好的解决方案。更好的解决方案是创建 Yii 小部件,这样您就可以轻松地从所有地方调用它,因为它独立于控制器。您还将获得很多好处,因为使用 Yii 小部件,您可以选择发送一些小部件配置参数,这些参数可用于自定义小部件,甚至根据该参数加载不同的视图/样式。此外,您将拥有自定义功能的好地方,这些功能可以帮助将一些业务逻辑添加到您的视图等。 你可以在这里找到一些起点 (http://www.yiiframework.com/doc/guide/1.1/en/basics.view)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-06
      • 1970-01-01
      • 2010-12-18
      • 2023-03-12
      • 2014-09-20
      • 1970-01-01
      • 2015-08-01
      相关资源
      最近更新 更多