我有一个简单的测验应用程序,我正在编写一系列挑战(简单,中等,难度),每个都有自己的问题。
要添加的问题应该是唯一的。
我有以下代码来“存储”数据
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;
答案 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
。