为什么我在Laravel表单上的验证失败并发送到其他页面?

为什么我在Laravel表单上的验证失败并发送到其他页面?,laravel,validation,blade,Laravel,Validation,Blade,我正在使用Laravel5.4,试图提交一个表单,并检查输入是否是数字。但是,当我进入验证时,它会转到另一个页面。如果我删除验证,则一切正常。 这是我的刀片表单:pin_verification.blade.php @extends('layouts.master') @section('title','Verify Order') @section('extra_head_info') <meta name="csrf-token" content="{{ csrf_token() }}

我正在使用Laravel5.4,试图提交一个表单,并检查输入是否是数字。但是,当我进入验证时,它会转到另一个页面。如果我删除验证,则一切正常。
这是我的刀片表单:pin_verification.blade.php

@extends('layouts.master')
@section('title','Verify Order')
@section('extra_head_info')
<meta name="csrf-token" content="{{ csrf_token() }}">

@endsection


@section('content')
    @if(count($errors) > 0)
        <ul>
            @foreach($errors->all() as $error)
                <li class="alert alert-danger">{{$error}}</li>
            @endforeach
        </ul>
    @endif


    {{ Form::open(['action' => 'PinVerificationController@pinValidation','id'=>'pin_verification_form']) }}
        We sent a text message to {{$clean_number}}. You should receive it within a few seconds.<br><br>
        {{ Form::label('Pin Code', null, ['class' => 'control-label']) }}
        {{ Form::text('pin_number', null,['placeholder' => 'Pin Code'])}}<br><br>
        Enter a 4 digit pin you received by phone.
        <br>
        <br>
        {{ Form::submit('Verify',['name'=>'validate'])}}

    {{ Form::close() }}
@endsection
我的代码进入pinValidation函数和第一个if语句,但当它到达
$validator=$this->validate($request)[
“pin_编号”=>“必需”|数字”
]);
它将myinit()函数路由到另一个控制器CheckoutController.php
如果我删除了我的验证,那么我的代码工作正常,我会被重定向到
redirect(“/test/create”)
为什么会这样?

我的路线是:

Route::get('/order/verify/{encrypted_key}', ['as'=>'pinverification','uses'=>'PinVerificationController@init']);
Route::get('/test/create', ['as'=>'orders_create', 'uses'=>'OrdersController@init']);
Route::post('/order/verify', ['as'=>'pinverification1', 'uses'=>'PinVerificationController@pinValidation']);
Route::get('/order/checkout/{product_id}', ['as'=>'checkout',      'uses'=>'CheckoutController@init']);

这是因为您实际上并没有检查验证,您只是在执行该方法,因此它自然会按照第一条返回重定向指令路由到
/test/create

请尝试以下方法:

public function pinValidation(Request $request){
    if($request->has('validate')){
        $validator = Validator::make($request->all(), [
            'pin_number' => 'required|numeric'
        ]);
        if ($validator->fails()) {
            return redirect('test/create')
                ->withErrors($validator)
                ->withInput();
        } else {
            // Success criteria, validation passed.
        }
    } else {
        $this->choosePinVerficationMethod($request);
    }
}

您在此处使用的验证方法会重定向您自己:

$validator = $this->validate($request,[
   'pin_number' => 'required|numeric'
]);
你应该使用:

$validator = Validator::make($request,[
   'pin_number' => 'required|numeric'
]);
然后检查:

if ($validator->fails()) {
   //redirect
};

if ($validator->fails()) {
   //redirect
};