想知道是否有人可以提供帮助。
我的Yii应用程序中有两页使用相同的控制器/模型,但使用不同的模型函数。我的初始页面很标准' admin'使用默认搜索()作为模型的页面(这很好 - 包括过滤),但我后来做了一个查看更改后的搜索功能的辅助视图/操作 - 这有一个ID传入其中(拉出)来自URL params)。这工作正常,但页面中的过滤器不起作用,这很烦人。
我认为这是因为在控制器中,我没有正确传递ID变量???
这是我的一些代码;
型号:
public function searchByEvent($event_id) {
$criteria = new CDbCriteria;
$criteria->compare('id', $this->id, true);
$criteria->compare('event_id', $this->event_id, true);
$criteria->compare('status_id', $this->status_id, true);
$criteria->compare('checkin_status_id', $this->checkin_status_id, true);
$criteria->compare('guest_of_user_id', $this->guest_of_user_id, true);
$criteria->compare('user_id', $this->user_id, true);
$criteria->compare('assign_group', $this->assign_group, true);
$criteria->with = 'user';
$criteria->compare('user.forename', $this->user_forename, true);
$criteria->compare('user.surname', $this->user_surname, true);
$criteria->compare('user.company', $this->user_company, true);
$criteria->order = 'user.surname ASC';
$criteria->condition = "event_id = :event_id";
$criteria->params=(array(':event_id'=>$event_id));
return new CActiveDataProvider($this, array(
'criteria' => $criteria,
'pagination'=>array('pageSize'=>50),
));
}
控制器:
public function actionAdminByEvent() {
$model = new EventAttendees('searchByEvent');
$model->unsetAttributes(); // clear any default values
if (isset($_GET['EventAttendees']))
$model->attributes = $_GET['EventAttendees'];
$this->render('webroot.themes.'.Yii::app()->name.'.views.adminEventAttend.adminByEvent', array(
'model' => $model,
));
}
查看;
$event_id = Yii::app()->getRequest()->getParam('event_id');
this->widget('booster.widgets.TbGridView', array(
'id' => 'event-attendees-grid',
'dataProvider' => $model->searchByEvent($event_id),
'pager' => array(
'class' => 'booster.widgets.TbPager',
'displayFirstAndLast' => true,
),
'filter' => $model,
'template'=>'{summary}{pager}{items}{pager}',
'selectableRows' => 0,
'selectionChanged' => 'function(id){ location.href = "' . $this->createUrl('view') . '/id/"+$.fn.yiiGridView.getSelection(id);}',
'columns' => array(...
任何人都可以看到过滤器出现问题的地方,或者我是否错过了搜索步骤?
答案 0 :(得分:1)
如果我猜测,那是因为模型中的属性未被声明为"安全"当它在" searchByEvent"场景。如果您使用了gii并查看了模型的规则方法,那么您会在那里找到一个条目,将所有属性标记为" safe"当使用"搜索"场景。您使用的是另一种名为" searchByEvent"在您的控制器操作($model = new EventAttendees('searchByEvent')
)中,如果您未在此方案中创建将属性标记为安全的新规则,那么您的质量分配线($model->attributes = $_GET['EventAttendees']
)将因任何属性而失败,而不会出现任何情况无规则。
如果不是这种情况,你可能想要看的另一件事是改变以下内容:
$criteria->condition = "event_id = :event_id";
$criteria->params=(array(':event_id'=>$event_id));
到
$criteria->addColumnCondition(array('event_id' => $event_id))
您的params行可能会覆盖使用所有先前比较语句设置的所有其他参数,因为您没有将新参数合并到当前集合中。使用适当的CDbCriteria方法可以解决这个问题。