0

モデルのカスタム ルールによって生成されたメッセージへのアクセスに問題があります。

モデルでは:

public function rules()
    {
        // NOTE: you should only define rules for those attributes that
        // will receive user inputs.
        return array(
            array('active_yn', 'numerical', 'integerOnly'=>true),
            array('user_name', 'length', 'max'=>20),
            array('password', 'length', 'max'=>100),
            array('full_name', 'length', 'max'=>150),
            // The following rule is used by search().
            // Please remove those attributes that should not be searched.
            array('user_id, user_name, full_name, active_yn', 'safe', 'on'=>'search'),
            array('user_name', 'unique', 'on'=>'api_save, insert', 'message'=>'User already in system'),
            array('user_name, full_name', 'required', 'on'=>'api_save', 'message'=>'Required field, {attribute}, is missing'),
        );
    }

そして私のコントローラーで。これは REST インターフェイス用です。

public function actioncreate(){
        $user = new User();
        $user->scenario = 'api_save';

        // Try to assign POST values to attributes
        if(isset($_POST)){
            foreach($_POST as $key=>$value) {
                // Does the model have this attribute? If not raise an error
                if($user->hasAttribute($key)){
                    $user->$key = $value;
                }else{
                    $var = array('status'=>500,'body'=>'Parameter <b>'.$key.'</b> is not allowed for model');
                    $send = new sendResponse($var);
                }
            }
        }else{
            $var = array('status'=>500,'body'=>'Parameters required for creation');
            $send = new sendResponse($var);
        }
        if(!$user->validate()){
            $str .= $user->message;
            $var = array('status'=>500,'body'=>$str);
            $send = new sendResponse($var);
        }
        $user->save();
        $var = array('status'=>200,'body'=>CJSON::encode($user));
        $send = new sendResponse($var);
    }

モデルが検証されない場合、モデルからのメッセージを表示したいと考えています。試してみgetErrorましgetErrorsたが、_error が定義されていないというエラーが表示されます。

おそらく簡単な質問に助けてくれてありがとう。

4

1 に答える 1

1

さらに検索した後、答えを見つけました:

   if($user->save() === false){
        $str = '';
        foreach ($user->errors as $value) {
            $str .= $value[0]."; ";
        }
        $var = array('status'=>500,'body'=>$str);
        $send = new sendResponse($var);
    }else{
        $var = array('status'=>200,'body'=>CJSON::encode($user));
        $send = new sendResponse($var);
    }

検証ステップをスキップして、モデルを保存しました。それが返された場合、配列またはエラーメッセージとしてfalseプルすることができました$user->errors

于 2012-07-01T23:59:40.053 に答える