为什么我在Laravel表单上的验证失败并路由到另一个页面?

时间:2018-01-13 03:28:14

标签: laravel validation blade

我正在使用Laravel 5.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

当我点击我的pin_verification.blade.php表单上的提交按钮时 我转到我的PinVerificationController.php:

class PinVerificationController extends Controller
{

    public function pinValidation(Request $request){

        if($request->has('validate')){

            $validator = $this->validate($request,[
                'pin_number' => 'required|numeric'
            ]);
            return redirect("/test/create");
            //return $this->validatePin($request);
        }else{//choosing verification method
            return $this->choosePinVerficationMethod($request);
        }
    }

    public function init(){
        ...
    }

    public function choosePinVerficationMethod(Request $request){
        ...
    }
}

我的代码进入pinValidation函数并进入第一个if语句,但是当它命中时 $validator = $this->validate($request,[ 'pin_number' => 'required|numeric' ]);
它将我的init()函数路由到另一个控制器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']);

2 个答案:

答案 0 :(得分:3)

因为您实际上并没有检查验证,所以您只是执行该方法,因此它自然只是根据第一个返回重定向指令路由到puts string unless string.include?"running"

请改为尝试:

/test/create

答案 1 :(得分:0)

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

$validator = $this->validate($request,[
   'pin_number' => 'required|numeric'
]);

你应该使用:

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

然后检查:

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

Reference