Laravel - 唯一规则验证 - getMessages不存在

时间:2016-04-12 14:13:50

标签: validation laravel unique

我有一个简单的测验应用程序,我正在编写一系列挑战(简单,中等,难度),每个都有自己的问题。

要添加的问题应该是唯一的。

我有以下代码来“存储”数据

 mGoogleApiClient = new GoogleApiClient.Builder(this)
                .enableAutoManage(this, this)
                .addApi(Auth.GOOGLE_SIGN_IN_API,gso)
               // .addApi(Plus.API, null)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
               // .addScope(Plus.SCOPE_PLUS_LOGIN)
                .build(); 

在我的模型中,我有一个验证方法

$v = ChallengeQuests::validate(Input::all());

        if ( $v->passes() ) {
            print 'validate passed';
            $record = ChallengeQuests::create(array(
                'challenge_id'=> (int) Input::get('challenge_id'),
                'question_id'=> (int) Input::get('question_id')
            ));
            $record->save();
            return redirect()->to($url['redirects_to']);
        } else {
            print 'error';
            print_r($v->getMessages());
            return Redirect::to('/')->withErrors($v->getMessages());
        }

但是当我运行我的代码时,Laravel抱怨

// model
class ChallengeQuests extends Model
{
    //
    protected $table = 'challengequests';
    protected $fillable=[
        'challenge_id',
        'question_id'
    ];

    public static function validate($input) {
        $rules = array(
            'challenge_id' => 'Required|Integer',
            'question_id' => 'Required|Integer|Unique:questions,id'
        );

        return Validator::make($input, $rules);
    }
}

我想要它以使question_id是唯一的。

我做错了什么?

编辑:

我正在使用:

BadMethodCallException in Validator.php line 3016:
Method [getMessages] does not exist.

堆栈追踪:

use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Input;

1 个答案:

答案 0 :(得分:3)

用于获取验证消息的正确方法不是getMessages()messages(),因此您的代码应如下所示:

return Redirect::to('/')->withErrors($v->messages());

此外,如果您正在使用Laravel 5,您可能希望使用Form Request Validation来执行您尝试以更好的方式实现的相同功能,并处理验证一个不同的层,负责为您传递错误和页面重定向。

通过在您的情况下使用表单请求,控制器方法将简化为:

public function store(ChallangeQuestsFormRequest $request)
{
    ChallengeQuests::create($request->only('challenge_id', 'question_id'));

    return redirect()->to($url['redirects_to']);
}

由于规则和验证以及错误情况下的重定向,将由ChallangeQuestsFormRequest类处理。此外,使用create创建模型条目会自动保存条目,因此无需对save的结果使用create