Php 如何以各种格式显示模型数据?
我在Php 如何以各种格式显示模型数据?,php,yii,Php,Yii,我在afterFind()方法中更改模型提供的数据,因此id是可单击的文本,如下所示: $this->id = CHtml::link($this->id, array('/admin/auditTrail/view', 'id' => $this->id)); 'columns'=>array( array( 'name' => 'id', 'type' => 'html', ), 然而,这会
afterFind()
方法中更改模型提供的数据,因此id
是可单击的文本,如下所示:
$this->id = CHtml::link($this->id, array('/admin/auditTrail/view', 'id' => $this->id));
'columns'=>array(
array(
'name' => 'id',
'type' => 'html',
),
然而,这会改变id
值的每一次出现-它出现在列表中,在细节页面中,甚至在面包屑中,这当然是不愿意的。如何决定在不同视图中使用哪种格式?例如,在面包屑和view.php
中,我只需要原始值,但在列表(admin.php
)中,我希望使用html链接,如下所示:
$this->id = CHtml::link($this->id, array('/admin/auditTrail/view', 'id' => $this->id));
'columns'=>array(
array(
'name' => 'id',
'type' => 'html',
),
另一方面,就MVC而言,这是一个好方法吗?我的意思是改变模型中的显示?模型不应该只用于数据库操作吗?不,这不是一个好方法。有许多更好的替代方法,例如: 让视图进行转换 不要在模型中做任何事情。当视图希望显示可单击的锚而不是裸ID时,它应该自己生成URL。这有点快,有点脏(它将URL生成的逻辑放在视图中,这并不理想),但是如果您只需要在一两个地方执行,它很容易,而且工作得很好 将URL作为单独的属性公开 在模型中放置计算的只读特性:
public function getAuditTrailUrl()
{
return Yii::app()->createUrl('/admin/auditTrail/view',
array('id' => $this->id));
}
然后,您可以在任何视图中使用auditTrailUrl
属性。这种方法的优点是URL生成对视图是不透明的,因此很容易修改
您可以使用此语法在CDATA网格中轻松呈现来自这些URL的链接:
'columns' => array(
array(
'class' => 'CLinkColumn',
'urlExpression' => '$data->auditTrailUrl',
)
),
在上面的定义中,$data
指的是网格中的每个模型,根据。我必须添加适当的类,如下所示:'class'=>'CLinkColumn',
-这有意义吗,对吗?它不起作用,因为未定义属性“TbDataColumn.urlExpression”。
错误。@petiar:是的,它是正确的——忘记提到它是我的错误,对此表示抱歉。我现在编辑了答案,将其包括在内。