Laravel 5.7.8验证错误未在联系人视图中显示

时间:2019-01-22 09:56:43

标签: php laravel validation

使用最新的Laravel 5.7.8和在Laravel 5.6.3中有效的方法可能不适用于我的情况。

我正在尝试创建联系表单验证(必需的ALERT / SUCCESS消息

contactUS.blade.php

@extends('layout.app')

@section('content')


<div id="page">
	<div id="publish">
    <div class="frameterms">
<h1>Contact</h1>
<script src='https://www.google.com/recaptcha/api.js'></script>
 
@if(Session::has('success'))
  <div class="notify yellow" style="display:block;">
     {{ Session::get('success') }}
   </div>
@endif
 

{!! Form::open(['route'=>'contactus.store']) !!}
<div class="row">
<label>Name<span class="asterix">*</span></label>
</div>
<div class="row {{ $errors->has('name') ? 'has-error' : '' }}">

{!! Form::text('name', old('name'), ['class'=>'row', 'placeholder'=>'Enter Name']) !!}
<span class="text-danger">{{ $errors->first('name') }}</span>
</div>
 
<div class="row {{ $errors->has('email') ? 'has-error' : '' }}">
  <label>Email<span class="asterix">*</span></label>
{!! Form::text('email', old('email'), ['class'=>'row', 'placeholder'=>'Enter Email']) !!}
<span class="text-danger">{{ $errors->first('email') }}</span>
</div>
 

<div class="row {{ $errors->has('message') ? 'has-error' : '' }}">
  <label>Subject<span class="asterix">*</span></label>
   <div class="selector">
   <div class="selector1">
   
  {!! Form::select('subject', array(
    'Select subject...' => 'Select subject...',
    'Web' => 'Web development',
    'Marketing' => 'Marketing',
    'App' => 'App development',
    'Advertising and Promotion' => 'Advertising and Promotion',
    'Other' => 'Other') ) !!}</div>
    <div>
  <span class="text-danger">{{ $errors->first('message') }}</span>
  </div>


<div class="row {{ $errors->has('message') ? 'has-error' : '' }}">
  <label>Message<span class="asterix">*</span></label>

{!! Form::textarea('message', old('message'), ['class'=>'row', 'placeholder'=>'Enter Message']) !!}
<span class="text-danger">{{ $errors->first('message') }}</span>
</div>


<div class="row">
  <small class="required"><span class="asterix">*</span> Required fields</small>
</div>

<div class="form-group {{ $errors->has('g-recaptcha-response') ? ' has-error' : '' }}">
  
   
  <div class="col-md-6 pull-center">
  {!! app('captcha')->display() !!}
  
  @if ($errors->has('g-recaptcha-response'))
  <span class="help-block">
  <strong>{{ $errors->first('g-recaptcha-response') }}</strong>
  </span>
  @endif
  </div>
</div>

 
<div class="rowbutton">
		<input onclick="$('.loader').show(); $(this).hide();" type="submit" value="Send message">
		<div class="loader" style="display:none;"></div>
</div>
 
{!! Form::close() !!}
 
</div>

</div>

</div>
</div>


@endsection

ContactUSController.php

<?php
 
namespace App\Http\Controllers;
 
use Illuminate\Http\Request;
use App\Http\Requests;
use App\ContactUS;
use Illuminate\Support\Facades\Input;
use Validator;
use Redirect;

 
class ContactUSController extends Controller
{
   /**
    * Show the application dashboard.
    *
    * @return \Illuminate\Http\Response
    */
   public function contactUS()
   {
       return view('pages.contactUS');
   }
 
   /**
    * Show the application dashboard.
    *
    * @return \Illuminate\Http\Response
    */
   public function contactUSPost(Request $request)
   {
       $this->validate($request, [
        'name' => 'required',
        'email' => 'required|email',
        'subject' => 'required',
        'message' => 'required',
        'g-recaptcha-response' => 'required|captcha'
        ]);
 
       ContactUS::create($request->all());
 
       return back()->with('success', 'Thanks for contacting us!');
       return redirect()->back();
   }
}

web.php

Route::get('contact', 'ContactUSController@contactUS');
Route::post('contact', ['as'=>'contactus.store','uses'=>'ContactUSController@contactUSPost']);

当我填写联系表单时,它会在后端的SQL数据库中添加一个帖子。当失败时,它会返回到联系表单视图。

问题是即使我已经输入了代码,验证器错误和SUCCESS消息也不会显示在视图中。

有人知道如何解决这个问题吗?有什么解决方法吗?任何建议将不胜感激。预先谢谢你。

这是Laravel 5.6.3项目的图片,必填字段正在工作:

enter image description here

这是Laravel 5.7.8项目的图片,必填字段不起作用:

enter image description here

5 个答案:

答案 0 :(得分:0)

如下更新您的回复。

return redirect()->back()->with('success', 'Thanks for contacting us!');

也删除最后的退货。

答案 1 :(得分:0)

在ContactUS :: create($ request-> all())行之后,您可以使用
这是我的代码

    Session::flash('successMsg','what ever you want to message');

    @if( Session::has('successMsg'))
      <p class="btn btn-block btn-success disabled successMsg m-b-30">{{ 
         Session::get('successMsg') }}</p>
    @endif 

进行这样的验证。顶部使用验证器。     使用验证器;

创建一个验证数组,其中您要验证$ request。然后像这样进行验证。在其他部分,编写代码。并在if部分中给出有效消息。

$v = [
        'image' => 'image|mimes:png,ico|max:200',
    ];
    $validator  = Validator::make($request->all(),$v);
    if($validator->fails()){
        Session::flash('errorMsg',$validator->errors());
        return redirect()->back();
    }else{

     }

答案 2 :(得分:0)

尝试指定您要在其中显示消息的view路线,

return redirect('contact')->with('success', 'Thanks for contacting us!');

然后在您的blade视图中将其显示为:

@if (session('success'))
    <div class="alert alert-success">
        {{ session('success') }}
    </div>
@endif

参考:Docs

更新:

从您的评论Why the <div class="row"> do not change to <div class="row has-error"> ?看来,您似乎在谈论$errors,因此您需要做的就是检查是否存在错误消息,然后显示如下消息:

如果要在每个字段下显示错误,可以这样做。

@if ($errors->has('firstname'))
    <div class="error">{{ $errors->first('firstname') }}</div>
@endif

在新版本的laravel中,它已更改为类似if ($errors->any())的名称,但是您可以参考文档here

答案 3 :(得分:0)

根据Laravel 5.7 Documentation

  return redirect('contact')->with('success', 'Thanks for contacting us!');

用户重定向后,您可以显示会话中的闪烁消息。例如,使用Blade语法:

@if (session('success'))
    <div class="alert alert-success">
        {{ session('success') }}
    </div>
@endif

答案 4 :(得分:0)

好吧,如果您想对必填字段输入错误,则必须这样输入:

{!!形式::文本(“名称”,旧的(“名称”),['类'=>'行','占位符'=>'输入名称','必填']))!!

该键是“必需的”,不带'则不一样。 我仍然不知道该怎么做,正确地发送成功消息。