Laravel重定向withErrors不起作用

时间:2016-05-02 08:48:12

标签: php validation laravel-5

所以我试图进行简单的laravel验证,但有点卡住,因为我无法返回验证错误信息。

控制器:

//for "GET" method
public function courseAdminCreate()
{
    return view('course/adminCreate');
}

//for "POST" method
public function doCourseAdminCreate()
{
    $rules = array(
        'name'  => 'required',
        'contact_name'  => 'required',
        'contact_number'  => 'required|numeric',
        'account_number'  => 'required|numeric',
        'address'  => 'required',
        'latitude'  => 'required',
        'longitude'  => 'required'
    );

    $validator = Validator::make(Input::all(), $rules);

    if ($validator->fails()) {

        //get error message
        $messages = $validator->messages();
        //die($messages); //if i using DIE command, error message appear

        return redirect("course/admin/create")->withErrors($validator);

    } else {
        //Save to DB
    }
}

routes.php文件:

//other code

Route::get('course/admin/create', ['as' => 'courseAdminCreate', 'uses' => 'CourseController@courseAdminCreate']);
Route::post('course/admin/create', ['as' => 'doCourseAdminCreate', 'uses' => 'CourseController@doCourseAdminCreate']);

//other code

查看:

@extends('layouts.app')

@section('title')
Course
@stop

@section('content')
<div class="row">
    <div class="col-lg-12">
        <div class="panel panel-default">
            <div class="panel-heading">
                @yield('title') Add
            </div>
            <div class="panel-body">
                {!! Form::open(['url' => '/course/admin/create']) !!}
                <div class="row">
                    <div class="col-lg-12">

                        <!--START PRINT ERROR MESSAGE -->
                        @if (count($errors) > 0)
                        <div class="alert alert-warning alert-dismissable">
                            <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
                            @foreach ($errors->all() as $error)
                                <li>{{ $error }}</li>
                            @endforeach
                        </div>
                        @endif
                        <!-- END PRINT ERROR MESSAGE -->

                    </div>
                    <div class="col-lg-6">
                        <div class="form-group">
                            <label>Course Name</label>
                            <input class="form-control" name="name" placeholder="name.." required>
                        </div>
                        <div class="form-group">
                            <label>Contact Name</label>
                            <input class="form-control" name="contact_name" placeholder="contact.." required>
                        </div>
                        <div class="form-group">
                            <label>Contact Number</label>
                            <input class="form-control" name="contact_number" placeholder="number.." required>
                        </div>
                        <div class="form-group">
                            <label>Account Number</label>
                            <input class="form-control" name="account_number" placeholder="account.." required>
                        </div>
                    </div>
                    <div class="col-lg-6">
                        <div class="form-group">
                            <label>Address</label>
                            <textarea class="form-control" name="address" rows="5" placeholder="address.." required></textarea>
                        </div>
                        <div class="form-group">
                            <label>latitude</label>
                            <input class="form-control" name="latitude" placeholder="latitude.." required>
                        </div>
                        <div class="form-group">
                            <label>longitude</label>
                            <input class="form-control" name="longitude" placeholder="longitude.." required>
                        </div>
                    </div>
                    <!-- /.col-lg-12 -->
                    <div class="col-lg-12">
                        <input type="submit" class="btn btn-default btn-success" value="Save"/>
                        <a href="{{ URL::to('course/admin') }}" class="btn btn-default btn-warning">Cancel</a>
                    </div>
                    <!-- /.col-lg-12 -->
                </div>
                <!-- /.row (nested) -->
                {!! Form::close() !!}
            </div>
            <!-- /.panel-body -->
        </div>
        <!-- /.panel -->
    </div>
    <!-- /.col-lg-12 -->
</div>
<!-- /.row -->
@stop

验证实际上是有效的,所以例如如果我在“contact_number”中输入数字旁边的其他字符,它会将我重定向回到course / admin / create,问题是我无法打印消息。如果我尝试var_dump它,视图中的$ errors总是算作空数组。

希望我的信息足够,非常感谢。

1 个答案:

答案 0 :(得分:0)

问题可能在你的控制器中。您可以在Controller方法中使用$this->validate()方法,而不是使用Facade方法Validator::make。由于您没有使用任何手动创建的验证器/规则,因此使用make方法毫无意义。

如果验证时出现任何错误,Laravel将自动重定向回用户来自的页面 - 因此您不需要任何自定义重定向逻辑。

在您的控制器中尝试此操作。您可以将完整的请求注入doCourseAdminCreate方法并将其传递给$this->validate()方法。

//for "GET" method
public function courseAdminCreate()
{
    return view('course/adminCreate');
}

//for "POST" method
public function doCourseAdminCreate(Request $request)
{
    $rules = array(
        'name'  => 'required',
        'contact_name'  => 'required',
        'contact_number'  => 'required|numeric',
        'account_number'  => 'required|numeric',
        'address'  => 'required',
        'latitude'  => 'required',
        'longitude'  => 'required'
    );

    $this->validate($request, $rules);

    // Save to db
}

所有错误消息都会自动存储到您已在模板中使用的$error变量中。