【问题标题】:Yii: zii.widgets.CDetailView - declare attrs in model or just in arguments of the widget?Yii: zii.widgets.CDetailView - 在模型中声明属性还是在小部件的参数中声明?
【发布时间】:2013-05-17 20:20:30
【问题描述】:

我有一个模型(我们称之为M)。此模型与另一个模型 (X) 有关系(我们称之为 R)。

默认情况下,Gii 生成将R 显示为数字 ID(数据库中的主键)的代码。我想将其显示为超链接。

我考虑了两种使用 zii.widgets.CDetailView 的方法:

  • $this->widget('zii.widgets.CDetailView') 提供额外的参数;
  • 在我的模型类中定义方法getHyperlink(),并将属性称为->hyperlink

这两种方式哪个更好?

第一种方式可能需要重复的代码(比如index.php 和 Gii 生成的 zii.widgets.CListView)。

第二种方式需要attributeLabels() 具有新属性hyperlink,该属性与其他(非超链接数字)属性具有相同的标题。所以我把同一个标题写了两次。

那么,这两种变体哪个更好?

【问题讨论】:

    标签: yii


    【解决方案1】:

    总的来说,我认为使用模型的第二种方法会更好,因为DRY更多。

    如果您决定要在另一个视图中使用超链接,那么您不必使用 $this->widget('zii.widgets.CDetailView'); 的额外参数重新定义逻辑

    【讨论】:

    • 除了您现在将视图代码添加到模型中,它应该与视图分开...... :-)
    • @acorncom 这是一个很好的观点。我想这两种方法的替代方法可能是使用CLinkColumn,并使用模型中的getUrl() 方法配置其url 属性。
    • 是的,getUrl() 方法可以工作,但你的模型真的应该是 URL 感知的吗?似乎您的模型应该尽可能与视图/路线无关。我可能最终会得到两个 CLinkColumn 设置,虽然并不理想,但让您无法深入研究模型,只是为了弄清楚您将人们发送到哪个 URL ...
    • @acorncom 好吧,根据链接到模型的频率,如果 URL 需要更改,在每个视图中重新定义 url 创建逻辑可能会很痛苦。也许可以创建另一个组件来集中 URL 解析代码。
    • 是的,虽然 Yii 的可爱之处在于 URL 解析代码已经内置在路由系统中。只要您使用 / 之类的基本设置,您以后就可以使用路由系统完全更改您的 URL。事物是使用 CUrlManager 的 getUrl 部分构建的。真的很漂亮;-)
    猜你喜欢
    • 2021-09-03
    • 1970-01-01
    • 2014-05-17
    • 1970-01-01
    • 2019-06-03
    • 2010-11-27
    • 2018-06-26
    • 1970-01-01
    • 2013-06-08
    相关资源
    最近更新 更多