0
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, /* 没有使用这个选项,所以注释了它 */ ))

在模型中

// 我真的需要这个函数吗 // public function search() {

    $criteria = new CDbCriteria;

   $criteria->compare('user_id', $this->user_id, true);
    return new CActiveDataProvider('viewjob', array(
       'criteria'=>$criteria,

    ));
},,

我在这里做错了什么。它仍在获取表中的所有可用行。

4

2 回答 2

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);
}

在视图中,简单地说:

$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('*'),
            ),
        );
    }
于 2014-04-11T14:58:55.880 回答
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

它会起作用。

于 2014-04-11T09:46:51.957 回答