CGridView Filters

Question:

Anyone know how to get the filters to work in this scenario:

I have a Assets table detail view that I include CGridView for another tables model Pms.

If I use Pms::model() in the filter that doesn’t work. Anyone know how to get it to work?





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

	'id'=>'pms-grid',

	'dataProvider'=>Pms::model()->pmsDetail($model->id),

	//'filter'=>$model,

	'columns'=>array(

		'id',

		//array('name'=>'asset', 'header'=>'asset_no', 'value'=>'$data->asset->asset_no'),

		'Subject',

		'scheduled_maintenance:boolean',

		'unscheduled_maintenance:boolean',

		'StartTime',

		'completion_date',

		/*

		'EndTime',

		'completion_date',

		'IsAllDayEvent',

		'RecurringRule',*/

		'downtime',

		/*'Color',

		'description_of_work',

		'company_id',*/

		

		array(

			'class'=>'CButtonColumn',

			'viewButtonUrl'=>'Yii::app()->createUrl("/pms/view", array("id" => $data->id))',

			'deleteButtonUrl'=>'Yii::app()->createUrl("/pms/delete", array("id" => $data->id))',

			'updateButtonUrl'=>'Yii::app()->createUrl("/pms/update", array("id" => $data->id))',

		),

	),

)); 



Any help would be good! :)

If I got you right the gridview shows a Pms model fields… in that case you can create a new Pms model in the controller and use it for the filter…

so in the controller you can add something like


$pms = new Pms;

Thanks but if I put that in the Assets controller it errors out (500 errors).

This is my Assets controller


<?php


class AssetsController extends Controller

{

	/**

	 * @var string the default layout for the views. Defaults to '//layouts/column2', meaning

	 * using two-column layout. See 'protected/views/layouts/column2.php'.

	 */

	public $layout='//layouts/column2';


	/**

	 * @return array action filters

	 */

	public function filters()

	{

		return array(

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

		);

	}

	


	

	

/*  public function actionUpload()

{

        Yii::import("ext.EAjaxUpload.qqFileUploader");

 		$bUrl=Yii::app()->baseUrl.'uploads';

        $folder=$bUrl;

        $allowedExtensions = array("jpg");

		$minSizeLimit=10;

        $sizeLimit = 3 * 1024 * 1024;// maximum file size in bytes

        $uploader = new qqFileUploader($allowedExtensions, $sizeLimit);

        $result = $uploader->handleUpload($folder);

        $result=htmlspecialchars(json_encode($result), ENT_NOQUOTES);

        echo $result;// it's array

}*/

  /*

  public function actionUpload() {

      $form = new UploadForm;

      if (isset($_POST['uploadFile'])) {

          if ($form->validate()) {

              $form->filename = CUploadedFile::getInstance($form, 'filename');

              //$file= dirname(Yii::app()->request->scriptFile) . DIRECTORY_SEPARATOR . $form->image->name;

              $file= 'protected/data/'.$form->filename->name;

              $form->filename->saveAs($file);

          }

      }

      $this->render('upload', array('form'=>$form));

  } */

  

	/**

	 * Specifies the access control rules.

	 * This method is used by the 'accessControl' filter.

	 * @return array access control rules

	 */

	public function accessRules()

	{

		return array(

			array('allow',  // allow all users to perform 'index' and 'view' actions

				'actions'=>array('index','view','assetdetail','vertchecklist'),

				'users'=>array('*'),

			),

			array('allow', // allow authenticated user to perform 'create' and 'update' actions

				'actions'=>array('create','update'),

				//'users'=>array('@'),

				'expression'=>'$user->group_id==="1"'

			),

		

			array('allow', // allow authenticated user to perform 'create' and 'update' actions

				'actions'=>array('create','upload'),

				//'users'=>array('@'),

				'expression'=>'$user->group_id==="1"'

			),

			array('allow', // allow admin user to perform 'admin' and 'delete' actions

				'actions'=>array('admin','delete'),

				//'users'=>array('@'),

				'expression'=>'$user->group_id==="1"'

			),

			array('deny',  // deny all users

				'users'=>array('*'),

			),

		);

	}


	/**

	 * Displays a particular model.

	 * @param integer $id the ID of the model to be displayed

	 */

	public function actionView($id)

	{

		$this->render('view',array(

			'model'=>$this->loadModel($id),

		));

               

	}

	

	

/*	

	public function actionVertchecklist() { 

                $model =new ChecklistVerticalMachine('mysearch'); 

                if(isset($_GET['id'])) 

                        $model->attributes =$_GET['id']; 

         

                $params =array( 

                        'model'=>$model, 

                ); 

         	   $this->renderPartial('checklistVerticalMachine/checklist/id', $params);

               

        }*/

	   

	

	public function actionAssetDetail($id)

	{

		

		$this->render('assetdetail',array(

			'model'=>$this->loadModel($id),

		));

               

	}


	/**

	 * Creates a new model.

	 * If creation is successful, the browser will be redirected to the 'view' page.

	 */

	public function actionCreate()

	{

		$model=new Assets;

		

		// Uncomment the following line if AJAX validation is needed

		// $this->performAjaxValidation($model);


		if(isset($_POST['Assets']))

		{

			$model->attributes=$_POST['Assets'];

			if($model->save())

			 

            $model->attributes=$_POST['Assets'];

            $model->filename=CUploadedFile::getInstance($model,'filename');

            if($model->save())

            {

				

            	$file= 'documents/'.$model->filename->name;

				if($model->filename->name) {

            	$model->filename->saveAs($file);

				}

				//model->filename->saveAs(Yii::app()->baseUrl.'/images');

                // redirect to success page

            	

				$this->redirect(array('view','id'=>$model->id));

			}

		}


		$this->render('create',array(

			'model'=>$model,

		));

	}




	/**

	 * Updates a particular model.

	 * If update is successful, the browser will be redirected to the 'view' page.

	 * @param integer $id the ID of the model to be updated

	 */

	public function actionUpdate($id)

	{

		$model=$this->loadModel($id);

                $old=$this->loadModel($id);

		// Uncomment the following line if AJAX validation is needed

		// $this->performAjaxValidation($model); 


		if(isset($_POST['Assets']))

		{

			$model->attributes=$_POST['Assets'];

		if($model->save())

				

		{

		$model->filename=CUploadedFile::getInstance($model,'filename');

              if (!empty($_FILES['Assets']['filename']['name'])) {

                if ($old->filename != "") {

                $file= 'documents/$old->filename->name';

                                        unlink($file);

                }          

                        } else {

                                $model->filename->name;

                        }       

            if($model->save())

            {

            	$file= 'documents/'.$model->filename->name;

				

            	$model->filename->saveAs($file);

                //model->filename->saveAs(Yii::app()->baseUrl.'/images');

                // redirect to success page

            	

				$this->redirect(array('view','id'=>$model->id));

			}

            	

				

			

		}

		}


		$this->render('update',array(

			'model'=>$model,

		));

	}


	/**

	 * Deletes a particular model.

	 * If deletion is successful, the browser will be redirected to the 'admin' page.

	 * @param integer $id the ID of the model to be deleted

	 */

	public function actionDelete($id)

	{

						 


	

		if(Yii::app()->request->isPostRequest)

		{

			

			 $bUrl=Yii::app()->baseUrl;

                          $model = $this->loadModel($id); 

                          $filepath= "documents/$model->filename";

                          if (!empty($model->filename)) 

                          unlink($filepath); 

 

                          $model->delete();			

			// we only allow deletion via POST request

			//$this->loadModel($id)->delete();


			// if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser

			if(!isset($_GET['ajax']))

				$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));

		}

		else

			throw new CHttpException(400,'Invalid request. Please do not repeat this request again.');

	}


	/**

	 * Lists all models.

	 */

	public function actionIndex()

	{

			

       

		$dataProvider=new CActiveDataProvider('Assets');

		$this->render('index',array(

			'dataProvider'=>$dataProvider,

                    

		));

                

	}


	/**

	 * Manages all models.

	 */

	public function actionAdmin()

	{

		$model=new Assets('search');

		$model->unsetAttributes();  // clear any default values

		if(isset($_GET['Assets']))

			$model->attributes=$_GET['Assets'];


		$this->render('admin',array(

			'model'=>$model,

		));

	}


	/**

	 * Returns the data model based on the primary key given in the GET variable.

	 * If the data model is not found, an HTTP exception will be raised.

	 * @param integer the ID of the model to be loaded

	 */

	public function loadModel($id)

	{

		$model=Assets::model()->findByPk($id);

		if($model===null)

			throw new CHttpException(404,'The requested page does not exist.');

		return $model;

	}


	/**

	 * Performs the AJAX validation.

	 * @param CModel the model to be validated

	 */

	protected function performAjaxValidation($model)

	{

		if(isset($_POST['ajax']) && $_POST['ajax']==='assets-form')

		{

			echo CActiveForm::validate($model);

			Yii::app()->end();

		}

	}

}



O man… you posted the whole controller so this post is really hard to check… I just need to see the action that renders that view… .anything other is just there to make it difficult to help you… I don’t see anywhere the


$pms = new Pms;

This line just creates a new object… so it should not be a reason for a 500 error… but if you are getting it… then you need to check the Pms object (model) to see why is that happening…

as did the method pmsDetail?