Laravel 5.7.8 Ошибки проверки не отображаются в виде контакта - PullRequest
0 голосов
/ 22 января 2019

Использование последней версии 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 голосов
/ 25 января 2019

Хорошо, если вы хотите получить ошибку для обязательных полей, вы должны указать ее следующим образом:

{!!Form :: text ('name', old ('name'), ['class' => 'row', 'placeholder' => 'Введите имя', 'обязательный']) !!}

Ключ «требуется», а не «требуется» без «».Я до сих пор не понял, как правильно сделать сообщение об успехе.

0 голосов
/ 22 января 2019

Согласно Laravel 5.7 Документация

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

После того, как пользователь перенаправлен, вы можете отобразить мигшее сообщение из сеанса.Например, используя синтаксис Blade:

@if (session('success'))
    <div class="alert alert-success">
        {{ session('success') }}
    </div>
@endif
0 голосов
/ 22 января 2019

После строки 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 вы хотите проверить. Затем сделайте проверку таким образом. В другом разделе вы пишете свой код. и в разделе, если дать правильное сообщение.

$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{

     }
0 голосов
/ 22 января 2019

Попробуйте указать маршрут view, в котором вы хотите показать сообщение, например:

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

А затем в вашем представлении blade получите его как:

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

Ref: Документы

ОБНОВЛЕНИЕ:

Из вашего комментария 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()) Однако вы можете обратиться к документации здесь .

0 голосов
/ 22 января 2019

Обновите свой ответ, как показано ниже.

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

Удалите также последний возврат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...