我试图在Laravel 5上使用自定义请求来验证通过post发送的输入,但是当表单字段正常时,即。表单验证没问题,我的控制器方法没有被调用。那是一个错误吗?怎么了?我知道这是可能的,因为我曾经在另一个项目中做过这个。我在这个项目中使用的是5.2.6版本,然后我认为这是一个特定版本的问题,当我转回"到5.1但编辑我的composer.json
,删除vendor
文件夹,然后使用composer install
重新安装。
我的UserController的内容:
//...
public function save(Requests\CreateUserRequest $request)
{
$user = new User();
$user->name = $request->input('name');
$user->email = $request->input('email');
$user->username = $request->input('username');
$user->password = $request->input('password_confirmation');
//$user->profile_id = $request->input('profile');
$user->profile_id = 1;
$user->save();
return redirect()->route('get_user_read');
}
//...
CreateUserRequest:
<?php
namespace App\Http\Requests;
use App\Http\Requests\Request;
class CreateUserRequest extends Request
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'profile' => 'required',
'name' => 'required',
'username' => 'required|unique:users,username',
'email' => 'required|email|unique:users,email',
'password' => 'required',
'password_confirmation' => 'required|same:password',
];
}
public function messages()
{
return [
'profile.required' => 'O campo perfil é obrigatório!',
'name.required' => 'O campo nome é obrigatório!',
'username.required' => 'O campo nome de usuário é obrigatório!',
'username.unique' => 'O nome de usuário já foi registrado!',
'email.required' => 'O campo email é obrigatório!',
'email.unique' => 'O email informado já foi registrado!',
'email.email' => 'O email informado não é válido!',
'password.required' => 'O campo senha é obrigatório!',
'password_confirmation.required' => 'O campo de confirmação de senha é obrigatório!',
'password_confirmation.same' => 'A confirmação de senha não confere com a senha informada!',
];
}
}
感谢。
答案 0 :(得分:0)
自Laravel 5.2以来,有一些名为Middleware Groups的功能。
由于FAILED验证没有显示任何错误,它似乎会将您重定向回您的表单。在会话中启用共享之前,您不会看到任何错误。
要显示错误,请确保已启用\Illuminate\View\Middleware\ShareErrorsFromSession::class
中间件。默认情况下,它包含在“web”中间件组中。
要解决您的问题,您只需创建路由组并将中间件组设置为“web”,如下所示:
Route::group(['middleware' => ['web']], function () {
// Here comes your routes
});
请看一下:Laravel 5.2 validation errors
另外,请确保表单中包含刀片错误标记,如下所示:
{!! Form::text('profile') !!}
@if ($errors->has('profile'))<p style="color:red;">{!!$errors->first('profile')!!}</p>@endif
{!! Form::text('name') !!}
@if ($errors->has('name'))<p style="color:red;">{!!$errors->first('name')!!}</p>@endif
或者你可以显示所有这些:
@if($errors->any())
<div style="color:red;">
@foreach($errors->all() as $error)
<p>{{$error}}</p>
@endforeach
</div>
@endif
此外,您不能使用public function messages()
方法并使用resources/lang/pt/validation.php
文件为您的语言定义所有消息。