今天当我翻阅Yii 代码的时候发现qiang还给我们提供了CDetailView这个类来完成类似的功能。两者到底有什么区别呢? 我们都知道 CGridView是根据数据表结构来生成我们需要的数据,而CDetailView是根据我们平时一直用到的model实例来生成数据。

同样以上一个列子来写,看看有什么不同:

$criteria = new CDbCriteria;
$criteria->select = 'user.id, username, fullname, email, last_login, company.name';
$criteria->order = 'username';
$users = User::model()->with('company')->together()->findAll($criteria);

很容易发现,这是我们以前在写Yii代码中做的最多的事。

$this->widget('zii.widgets.CDetailView', array(
    'model' => $users,
    'attributes'=>array(
        'id',             
        'username',        
        'fullname',
        'company.name',  
        array(
            'dataField' => 'email',
            'dataExpression' => 'CHtml::mailto($data->email)'
        ), 
        'last_login',
        array('class' => 'CRudColumn', 'header' => '操作')
    )
));

在这里我们用CdetailView代替原来的CGridView, 这里还能得到对关联表的支持,是不是感觉这种方法更亲切点呢