无法使用yii框架按表单编辑具有用户标识的特定用户数据

时间:2014-04-02 07:43:46

标签: php yii

我是YII框架的新手。我正在使用YII框架进行更新操作。我的控件名为sitecontroller.php,型号jobseekerprofile.php,查看personal.php

我收到了错误:

Fatal error: Call to a member function isAttributeRequired() on a non-object in E:\wamp\www\yii\framework\web\helpers\CHtml.php on line 1414

我的桌子是job_seeker_profile 字段 1.id 2.user_id 3.contact_no 4.gender 5.dob 6.mstatus 7.address 8.location_id 我想根据user_id

编辑contact_no和address中的数据

Model-Jobseekerprofile.php - 规则

public function rules()
  {
    return array(
                array('contact_no,address','required'),
    );
 }

控制器Sitecontroller.php

class SiteController extends Controller {

    public function actionpersonal()
  {
    $user_id = trim($_GET['id']);
    $model=Jobseekerprofile::model()->find(array(
                                         'select'=>'contact_no,address',"condition"=>"user_id=$user_id",
                                         'limit'=>1,));
    $model = Jobseekerprofile::model()->findByPk($user_id);                                  
    if(isset($_POST['Jobseekerprofile']))
      {
        $model->attributes=$_POST['Jobseekerprofile'];
        if($model->save())
        {
           $this->redirect(array('profile','user_id'=>$model->user_id));
        } 
      }
    $this->render('personal',array('model' =>$model));
  }

}

有人帮帮我吗?

3 个答案:

答案 0 :(得分:0)

public function actionpersonal() {
    $user_id = trim($_GET['id']);
    $model = Jobseekerprofile::model()->findByPk($user_id);

    if (isset($_POST['Jobseekerprofile'])) {
        $model->attributes = $_POST['Jobseekerprofile'];  //post key edited
        if ($model->save()) {
            $this->redirect(array('profile', 'user_id' => $model->user_id));
        }
    }
    $this->render('personal', array('model' => $model));
}

答案 1 :(得分:0)

似乎$model = Jobseekerprofile::model()->findByPk($user_id)没有找到任何内容,因此$model为空,这就是$model->isAttributeRequired()引发错误的原因。检查你的传入参数因为这个,并检查是否有一个具有这样的id的配置文件(或者你应该按属性搜索而不是id?)。

此外,您可以使用

public function actionPersonal($id) {
    $model = Jobseekerprofile::model()->findByPk($id);
    //
}

而不是

public function actionpersonal() {
    $user_id = trim($_GET['id']);
    $model = Jobseekerprofile::model()->findByPk($user_id);
    //
}

答案 2 :(得分:0)

首先检查你在$ _POST中得到了什么 如果一切正常,那么尝试保存

  $model = Jobseekerprofile::model()->findByPk($user_id);

if (isset($_POST['Jobseekerprofile'])) {
    $model->attributes = $_POST['jobseekerprofile'];
   $model->contact_no= $_POST['Jobseekerprofile']['contact_no'];  //post key edited
   $model->address = $_POST['Jobseekerprofile']['address']; 
    if ($model->save()) {
        $this->redirect(array('profile', 'user_id' => $model->user_id));
    }
}
$this->render('personal', array('model' => $model));

如果不起作用,请检查返回的模型

$error=$model->getErrors();
print_r($error);

上面的代码肯定会让你知道它为什么不保存