【问题标题】:Custom request not calling controller method on form validation success自定义请求未在表单验证成功时调用控制器方法
【发布时间】:2016-05-22 19:06:52
【问题描述】:

我正在尝试在 Laravel 5 上使用自定义请求来验证通过 post 发送的输入,但是当表单字段正常时,即。表单验证很好,我的控制器的方法没有被调用。那是一个错误吗?怎么了?我知道这是可能的,因为我以前在另一个项目中做过。我在这个项目中使用的是 5.2.6 版本,然后我认为这是这个特定版本的问题,那是当我“切换回”到 5.1 但编辑我的composer.json,删除vendor 文件夹然后重新安装@987654323 @。

我的 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');
}
//...

创建用户请求:

<?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!',
    ];
}
}

谢谢。

【问题讨论】:

  • 请检查“Requests\CreateUserRequest”是否是您请求文件的真实路径
  • 那么如果你 dd() 你在保存函数中的请求没有任何反应?
  • 为了测试我的保存函数是否被调用,我把return " ";放在其他所有东西之前;它永远不会被执行。我应该看到一个空白页。正如我上面所说,当我使用我的自定义请求来验证表单输入时,我的保存函数永远不会被调用。
  • 您的表单是否包含rules 方法数组中描述的所有这些值? IE。个人资料、姓名、用户名、电子邮件、密码、密码确认。当你用return []改变你的rules方法时检查它是否有效
  • 您的问题回答正确吗?

标签: validation laravel-5 routes laravel-5.1


【解决方案1】:

从 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 文件为您的语言定义所有消息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多