在用户创建过程中,我需要向外部服务器查询其他数据,如果失败,我需要在验证或创建时返回错误。这样做最好怎么办?以下是用于注册用户的默认Laravel代码:
protected function validator(array $data)
{
$query = queryExternalServerForAdditionalData();
if($query->success){
//add data from query to other user data?
//$data['data'] = $query->data;
return Validator::make($data, [
'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:6|confirmed',
]);
} else {
//somehow return an error, but how?
}
}
protected function create(array $data)
{
// or maybe do the query and error return here?
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
// add my additional data
// 'data' => $data['data']
]);
}
因此,您可以看到我的问题是如何从验证器或创建方法返回错误?我试图返回redirect()并添加了一个错误属性,但是我得到一个错误,即调用validator / create的方法需要其他东西,并且返回重定向,这样看起来不是一个选项。
答案 0 :(得分:0)
恕我直言,最好的方法是creating form requests。
public function rules()
{
return [
'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users|check_server_for_additional_data',
'password' => 'required|string|min:6|confirmed',
];
}
例如,我为电子邮件字段添加了check_server_for_additional_data
,custom validation rule(电子邮件字段中会显示错误消息)。
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Validator;
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
Validator::extend('check_server_for_additional_data', function ($attribute, $value, $parameters, $validator) {
return // queryExternalServerForAdditionalData()
});
}
}
不要忘记定义错误消息(resources/lang/LOCALE/validation.php
)
"check_server_for_additional_data" => "Umm ohh.. Invalid!",