【问题标题】:Laravel validation throwing route errorLaravel 验证抛出路由错误
【发布时间】:2014-08-21 02:20:58
【问题描述】:

我正在尝试对控制器中的表单字段进行基本验证检查。代码如下:

                $validator = Validator::make(
            array('email' => 'required|min:7'),
            array('password' => 'required|min:7'),
            array('firstName' => 'required'),
            array('lastName' => 'required'));

        if ($validator->fails())
        {
            // The given data did not pass validation
            /*Get error msgs from validator*/

           return Redirect::to('members.registration')->withErrors($validator);

        }

这里传递给 Redirect::to 的参数是文件夹成员和驻留在其中的注册视图。问题是由这一行引起的:

   return Redirect::to('members.registration')->withErrors($validator);

当它被注释掉时,表单提交返回一个空白的白页。否则显示图片中如下错误

路由文件有以下内容:

Route::get('/', 'MainController@index');
Route::get('membersaccess', array('as' => 'membersaccess', 'uses' => 'MainController@loadMembersAccess'));
Route::get('signin', array('as' => 'signin', 'uses' => 'MembersController@loadlogin'));
Route::get('signup', array('as' => 'signup', 'uses' => 'MembersController@loadRegistration'));
Route::post('postLogin', array('as' => 'postLogin', 'uses' => 'MembersController@login'));
Route::post('postRegistration', array('as' => 'postRegistration', 'uses' => 'MembersController@registration'));

包含验证部分的函数是:

public function registration()
    {
        $email = Input::get('email');
        $password = md5(Input::get('password'));
        $firstName = Input::get('firstName');
        $lastName = Input::get('lastName');
        $country = Input::get('country');

        //echo $email;

        $validator = Validator::make(
            array('email' => 'required|min:7'),
            array('password' => 'required|min:7'),
            array('firstName' => 'required'),
            array('lastName' => 'required'));

        if ($validator->fails())
        {
            // The given data did not pass validation
            /*Get error msgs from validator*/

           return Redirect::to('members.registration')->withErrors($validator);

        }
    }

及参考表格:

@if(Session::has('errors'))
    <? $errors = Session::get('errors'); ?>
        <h3> {{ $errors->first('email') }}</h3>
@endif

{{ Form::open(array('route' => 'postRegistration')) }}

{{ Form::text('email', null, array('placeholder'=>'Email', 'class' => 'randomfieldsize' ) ) }}
{{ Form::password('password', array('placeholder'=>'Password', 'class'=>'randomfieldsize' ) ) }}
{{ Form::text('firstname', null, array('placeholder'=>'First Name', 'class' => 'randomfieldsize' ) ) }}
{{ Form::text('lastName', null, array('placeholder'=>'Last Name', 'class' => 'randomfieldsize' ) ) }}   
{{ Form::select('country', array('' => '', 'saudi' => 'Saudi Arabia', 'uae' => 'UAE')) }} <br><br>


{{Form::submit('Proceed', ['class' => 'button [radius round]'])}}


{{ Form::close() }}

【问题讨论】:

    标签: validation laravel laravel-4


    【解决方案1】:

    试试这个:

    return Redirect::route('signup')->withErrors($validator);
    

    您没有将路由定义为 members.registration,所以这可能是问题所在。

    为了显示错误,我通常使用这个(使用引导程序进行样式设置):

    @if( $errors->has() )
    <div class="alert alert-danger alert-dismissable">
        <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
        <ul>
        @foreach ( $errors->all('<li>:message</li>') as $error )
            {{ $error }}
        @endforeach
        </ul>
    </div>
    @endif
    

    编辑:呃,之前没有注意到,但是你的验证码是错误的。请参考http://laravel.com/docs/validation应该是这样的:

        $email = Input::get('email');
        $password = Input::get('password'); // Better to hash the password in another place, since md5 can create a hash even of an empty string. Also, please use laravel hash utility instead of md5: http://laravel.com/docs/security#storing-passwords
        $firstName = Input::get('firstName');
        $lastName = Input::get('lastName');
        $country = Input::get('country');
    
        $validator = Validator::make(
            compact('email', 'password', 'firstName', 'lastName', 'country'),
            array(
                'email' => 'required|min:7',
                'password' => 'required|min:7'
                'firstName' => 'required'
                'lastName' => 'required'
            ));
    

    【讨论】:

    • 我进行了更改,现在当我提交表单(是否为空)时,它只是重新加载为空而没有错误。我猜还是有问题,因为这些错误还没有显示出来。
    • 请注意,当我把 echo "error";在视图中的 @if 条件内,它实际上会打印该内容,但不会打印与验证规则相关的错误。知道为什么吗?
    • 我试过了,它只打印一个验证错误,即密码。我以为你使用的 foreach 会打印所有这些。
    • 再次编辑了我的答案。那应该可以解决它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-11
    • 1970-01-01
    • 2018-01-18
    • 1970-01-01
    • 2019-06-20
    • 1970-01-01
    相关资源
    最近更新 更多