【问题标题】:Laravel 5.7.8 Validation Errors not showing in contact viewLaravel 5.7.8 验证错误未显示在联系人视图中
【发布时间】:2019-06-15 18:19:14
【问题描述】:

使用最新的Laravel 5.7.8Laravel 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 数据库中添加一个帖子。当它失败时,它会返回到联系表单视图。

问题是即使我已经编码,验证器错误和成功消息也不会显示在视图中。

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

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

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

【问题讨论】:

  • 你能试试我的答案吗?
  • 和以前一样,创建并发送了消息,但是没有出现成功云。
  • 你试过我的确切代码了吗? Bcz 它在我这边工作正常
  • 是的,确切的代码!此代码适用于 laravel 5.6。 x 但不是在较新的版本 5.7.8 上也许 css 有问题? : S
  • 为什么
    不更改为

标签: php laravel validation


【解决方案1】:

好的,如果你想得到必填字段的错误,你必须这样写:

{!! Form::text('name', old('name'), ['class'=>'row', 'placeholder'=>'Enter Name','required']) !!}

密钥是“必需的”,不像没有“”的必需。 我仍然没有弄清楚如何正确地发送成功消息。

【讨论】:

    【解决方案2】:

    在 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{
    
         }
    

    【讨论】:

    • 我尝试过但没有成功。还是一样。
    • 现在看看我是如何刷新会话并从字体末尾获取它的。您需要使用会话;这个在顶部
    • 现在我得到错误:找不到类'App\Http\Controllers\Session'。问题在这里: Session::flash('successMsg','whatever you want to message');
    • 您是否在控制器中使用了 Session。使用 App\Http\Requests;使用 App\ContactUS;就像这些添加使用Session;
    • 是的。添加“使用会话”。无需添加App
    【解决方案3】:

    尝试指定您想要显示消息的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 &lt;div class="row"&gt; do not change to &lt;div class="row has-error"&gt; ? 看来你在谈论$errors 所以你需要做的是检查错误消息是否存在,然后显示如下:

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

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

    在新版本的 laravel 中,它被改为 if ($errors-&gt;any()) 但是你可以参考文档 here

    【讨论】:

    • 我们正在讨论错误(必填字段)以及成功发送电子邮件后的成功消息。上面的所有代码都在 5.6 中工作,但在 5.7 中不工作
    • 您现在遇到什么错误?你的cmets不清楚!
    • 感谢您的努力。但这似乎也行不通。我没有收到任何警报(必填字段),也没有成功按摩。
    【解决方案4】:

    根据 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
    

    【讨论】:

    • 和以前一样,创建并发送了消息,但是没有出现成功云。
    【解决方案5】:

    更新您的回复如下。

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

    也删除最后一次返回。

    【讨论】:

    • 我尝试过但没有成功。还是一样。
    • 在我之前关于 laravel 5.6.3 的项目中,
      转向
      但在 laravel 5.7.8 中保持不变
    • 你能在刀片文件中这样做吗 var_dump($errors);死();
    • 我该怎么做?具体在哪里?
    • 将此添加到您的刀片文件&lt;?php var_dump($errors); die() ?&gt; 并刷新页面。你可能会在那里得到一个错误对象。让我知道那个对象是怎么回事,也许我可以帮助你。
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签