I am working on a job site,And want to show only the jobs posted by a particular user in cgridview.My actuall aim is to authenticate the user so that only jobs posted by him/her will be visible in cgridview.I have done the following stuff,but not working.
In controller:
public function actionViewJob() {
$user_id = Yii::app()->session['user_id'];
/* For User Authentication */
if (Yii::app()->user->getId() === null)
$this->redirect(array('site/login'));
/* For User Authentication */
/* Have tried the following codes to filter */
$model= ViewJob::model()->findAll(array(
'select'=>'*',"condition"=>"user_id='$user_id'",
));
// $model=ViewJob::model()->findByAttributes(array('user_id'=>Yii::app()->user->id));
// $model = ViewJob::model()->findAll("user_id=$user_id");
$model = new Viewjob('search');
$params = array('model' => $model,
);
$this->render('viewjob', $params);
}
在视图中
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider' =>$model->search()
//'filter'=> $ model,/ *没有使用这个选项,所以评论它* / ))
在模型中
//我真的需要这个功能// 公共功能搜索(){
$criteria = new CDbCriteria;
$criteria->compare('user_id', $this->user_id, true);
return new CActiveDataProvider('viewjob', array(
'criteria'=>$criteria,
));
},,
我在这里做错了什么。它仍在获取表格中的所有可用行。
答案 0 :(得分:0)
你定义$ model 3次:
$model= ViewJob::model()->findAll(array(
'select'=>'*',"condition"=>"user_id='$user_id'",
));
然后
$model = new Viewjob('search');
并且
'dataProvider' =>$model->search()
选择一个你需要的,最后一个。并添加到控制器
$model->user_id = $user_id
它会起作用。
答案 1 :(得分:0)
创建新的CDbCriteria对象并使用它添加条件并将其传递给模型。 在控制器中:
public function actionViewJob() {
$criteria = new CDbCriteria ();
$criteria->condition = 'user_id=' . Yii::app()->user->id;
$model = ViewJob::model()->findAll($criteria);
$params = array('model' => $model);
$this->render('viewjob', $params);
}
在View中,只需:
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider' =>$model
另外,对于使用身份验证,在您的控制器中,您不需要检查,如果用户具有用户ID,只需添加访问规则,这将自动将用户重定向到登录页面以查看作业,一旦他们是登录后,会将它们返回到同一页面。所以,将它添加到我们控制器的顶部..
class YourController extends Controller {
public function filters() {
return array(
'accessControl', // perform access control
);
}
/**
* 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'),
'users' => array('*'),
),
array('allow', // allow authenticate user actions
'actions' => array('viewjob'),
'users' => array('@'),
),
array('deny', // deny all users
'users' => array('*'),
),
);
}