Cgridview Поиск

Есть вьюшка на CGridView




<?php

	echo Chtml::form();

	echo Chtml::submitButton(Yii::t("main", "Show"), array('name'=>'approve'));

	echo Chtml::submitButton(Yii::t("main", "Hide"), array('name'=>'disapprove'));

?>

<?php $this->widget('zii.widgets.grid.CGridView', array(

	'id'=>'comment-grid',

	'dataProvider'=>$model->search(),

	'filter'=>$model,

	'columns'=>array(

		array(

			'class'=>'CCheckBoxColumn',

			'id'=>'commentId',

		),

		'id'=>array(

			'name'=>'id',

			'headerHtmlOptions'=>array('width' => 20),

		),

		'status'=>array(

			'name'=>'status',

			'value'=>'($data->status==0)?Yii::t("main", "visible"):Yii::t("main", "blocked")',

			'filter'=>array(1=>Yii::t("main", "blocked"),0=>Yii::t("main", "visible")),

		),

		'content'=>array(

			'name'=>'content',

			'filter'=>false,

			'headerHtmlOptions'=>array('width' => 250),

		),

		'event_id'=>array(

			'name'=>'event_id',

			'value'=>'$data->event->title',

			'filter'=>Page::allEvents(),

		),

		'created'=>array(

			'name'=>'created',

			'filter'=>false,

		),

		'user_id'=>array(

			'name'=>'user_id',

			'value'=>'($data->user_id)?$data->user->username:""',

			'filter'=>User::allUsers(),

		),

		'guest',

		

		array(

			'class'=>'CButtonColumn',

			'updateButtonOptions'=>array('style'=>'display:none'),

		),

	),

)); ?>

<?php

	echo Chtml::endForm();

?>




Модель:




public function rules()

	{

		// NOTE: you should only define rules for those attributes that

		// will receive user inputs.

		return array(

			array('content, guest', 'required', 'on'=>'guest'),

			array('content', 'required'),

			array('event_id, created, user_id', 'numerical', 'integerOnly'=>true),

			array('guest', 'length', 'max'=>255),

			array('verifyCode', 'captcha', 'allowEmpty'=>!CCaptcha::checkRequirements(), 'on'=>'guest'),

			

			

			array('id, status, content, event_id, created, user_id, guest', 'safe', 'on'=>'search'),

		);

	}


...


public function search()

	{

		// Warning: Please modify the following code to remove attributes that

		// should not be searched.


		$criteria=new CDbCriteria;

		

		$criteria->compare('id',$this->id);

		$criteria->compare('status',$this->status);

		$criteria->compare('event_id',$this->event_id);

		$criteria->compare('created',$this->created);

		$criteria->compare('user_id',$this->user_id);

		$criteria->compare('guest',$this->guest);

		

		return new CActiveDataProvider($this, array(

			'criteria'=>$criteria,

			'pagination'=>array(

				'pageSize'=>11,

			)

		));

		

	}

...




Проблема в том, что в CGridView не срабатывает поиск по "id" и "guest"

Оба эти поля относятся к таблице данной модели

Подскажите пожалуйста что тут не так

А что, по другим полям фильтр срабатывает?

Добавьте вывод в лог в <cintroller>/index и убедитесь, что у вас он вызывается, может у вас даже AJAX запрос не уходит…

Что именно я должен увидеть в логах ?

Я в конфиг добавил




'log'=>array(

			'class'=>'CLogRouter',

			'routes'=>array(

				array(

					'class'=>'CFileLogRoute',

					'levels'=>'error, warning',

				),

				// uncomment the following to show log messages on web pages

				

				array(

					'class'=>'CWebLogRoute',

				),

				

			),



Получил вывод в браузер. Что искать ?

CGridView обновляет свои данные когда в фильтре(в заголовке столбцов) изменяются значения, делает он это с помощью AJAX запроса. Вам надо убедится что этот запрос действительно отправляется на action "index" вывод логов в браузер вам не поможет, потому что AJAX.

В "index" сделайте вывод $_REQUEST параметров в текстовый лог. Должно быть:

  1. открыли страницу, есть запись в логе

  2. изменили фильтр столбца "status", он применился, есть запись в логе

  3. изменили фильтр столбца "id", он не применяется (по вашим словам), но есть ли запись в логе? И если есть, то какая?

Проверил $_REQUEST - запрос приходит.

Однако Я закомментировал фильтры




	public function filters()

	{

		return array(

			'accessControl', // perform access control for CRUD operations

			'postOnly + delete', // we only allow deletion via POST request

		);

	}



И поиск заработал.

Но я думаю что удаление их - не самый лучший вариант. Что-то не так в них

Проблема именно в обоих фильтрах? Или в accessControl?

В обоих