Задать вопрос
@Radiss

Почему не срабатывает валидация в форме?

Использую версию 5.2

В поле контактов есть обяз. валидируемые поля 'name' и 'email' и необз. - 'site' и 'text'
При тестировании если заполнить только 2 поля 'site' и 'text' , то должен произойти редирект на предыдущую стр., но так как не все обязательные поля заполнены специально, то поля в формах после отправки должны остаться заполненными. Но в полях 'site' и 'text' данных нет.
В шаблоне значение из сессии должно записаться в атрибут value каждого поля формы.
<div class="form-group">
<label for="email">Email address</label>
<input type="email" class="form-control" id="email" value="{{ old('email') }}" name="email" placeholder="Email">
</div>


В чем проблема? В сессию не записываются данные или не выводятся? value="{{ old('email') }}"

Механизм сессии включен в Kernel.php
protected $middleware = [
    \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
    \Illuminate\Session\Middleware\StartSession::class,
    \Illuminate\View\Middleware\ShareErrorsFromSession::class
    //\App\Http\Middleware\Mymiddleware::class
];

Если заполнить все поля и отправить, то возвращается arr
array:4 [▼
  "name" => "name"
  "email" => "admin@mail.ru"
  "site" => "site"
  "text" => "text"
]

Роут: //site52/contact/hello
Может, дело в токенах? В форме должен быть редирект
<form method="post" action="{{ route('contact',array('name'=>'hello')) }}">

Но если этот путь не прописать в VerifyCstToken.php, то выходит ошибка.
"TokenMismatchException in VerifyCsrfToken.php line 67:"

Поэтому, в VerifyCsrfToken.php прописываю исключения:
(\app\Http\Middleware\VerifyCsrfToken.php)

spoiler
namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;

class VerifyCsrfToken extends BaseVerifier
{
     protected $except = [
        //'your/route'
        '/comments',
        'http://lara52/comments',
        '/pages',
        'http://lara52/pages',
        '/article',
        'http://lara52/article',
        'http://lara52/article/pages',
        '/contact',
        'http://lara52/contact/',
       '/contact/hello',
        'http://lara52/contact/hello',        
    ];
}



Форма contact.blade.php

spoiler
@extends('default.layouts.layout')
@section('content')
<div class="col-md-9">
<div class="">
    <h2>Contact us!</h2>
    </div>
	<p>
	Some text
	</p>
	@if(count($errors) > 0)
		<div class="alert alert-danger">
			<ul>
				@foreach($errors->all() as $error)
					<li>{{ $error}}</li>
				@endforeach 		
			</ul>
		</div>
	@endiа
<form method="post" action="{{ route('contact',array('name'=>'hello')) }}">
<div class="form-group">
	    <label for="name">Name</label>
	    <input type="text" class="form-control" id="name" name="name" value="{{ old('name') }}" placeholder="Jane Doe">
	  </div>
	  <div class="form-group">
	    <label for="email">Email address</label>
	    <input type="email" class="form-control" id="email" value="{{ old('email') }}" name="email" placeholder="Email">
	  </div>
	  <div class="form-group">
	    <label for="site">Site</label>
	    <input type="text" class="form-control" id="site" value="{{ old('site') }}" name="site" placeholder="Site">
	  </div>
	  <div class="form-group">
	    <label for="text">Text</label>
	    <textarea class="form-control" id="text" name="text" rows="3">{{ old('text') }}</textarea>
	  </div>
	  <button type="submit" class="btn btn-primary">Submit</button>
	</form>
</div>	
@endsection


ContactController.php
spoiler
namespace App\Http\Controllers\Admin;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class ContactController extends Controller
{
     public function show(Request $request,$id=FALSE) {
    	if($request->isMethod('post')) {
			$rules = [
				'name'=>'required|max:7',
				'email'=>'required|email'
			];
			
			$this->validate($request,$rules);
				dump($request->all());
		}
		return view('default.contact',['title'=>'Contacts']);
	}
}

  • Вопрос задан
  • 100 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
@Radiss Автор вопроса
В Kernel.php убрать из protected $middleware StartSession и ShareErrorsFromSession. т.к. они уже в middlewareGroups прописаны. Если появится другая группа маршрутов, нужно будет заново вписать эти middleware.

protected $middleware = [
        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
      //  \Illuminate\Session\Middleware\StartSession::class,
      //   \Illuminate\View\Middleware\ShareErrorsFromSession::class
        //\App\Http\Middleware\Mymiddleware::class
    ];
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы