Laravel Validator:将messages()分配给object属性时,属性为空

时间:2014-11-13 07:23:48

标签: php validation laravel

我使用prepare方法和validate方法设置了我的模型。 prepare方法使用给定数组更新所有模型属性,并返回返回Validator :: make ($this->toArray(), array(rules))的validate方法;所以像这样:

Model extends Eloquent{
    public function prepare($newValues){
        $this->value1 = $newValue['value1'];
        // etc....
        return $this->validate();
    }
    public function validate(){
        $v = Validator::make($this->toArray(), array(
                    'value1' => 'required',
                    //etc..
                )
             );
        return $v;
    }
}

在我的控制器中,我创建了一个空白错误对象,检查模型是否有效,如果没有将$errors->errors属性设置为true并将$errors->messages设置为验证器messages()对象,就像这样:

Controller extends BaseController{
    public function update(){
        $newValues = Input::json('newValues');
        $model = Model::find($newValues['id']);
        $modelV = $model->prepare($newValues);

        $errors = new stdClass();

        if($modelV->fails()){
             $errors->errors = true;
             $errors->messages = $modelV->messages();
             return Response::json($errors);
        }else{
             $model->save();
             return $model;
        }
 }

我将数据返回到使用Angular的前端。当我console.log(theReturn)时,我使用errors=true获取对象,但messages属性是一个空白对象。奇怪的部分是如果我单独返回$modelV->messages()它正确显示(例如{'value1':['value1 is required']})。我很想说这是一个错误,但我真的不知道发生了什么。只有当我将$modelV->messages()分配给另一个对象属性时,它才会变为空白。我将在同一时间使用一种解决方法,但我想知道是否有人能看到我做错了什么,或者自己经历过这种情况。

1 个答案:

答案 0 :(得分:0)

我的解决方案是使用$ validator-> messages() - > toArray()