Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP: Laravel
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
SZV
2 / 2 / 1
Регистрация: 25.12.2016
Сообщений: 104
1

Как получить ошибки валидации

03.03.2019, 15:13. Просмотров 742. Ответов 6

в шаблоне перед формой прописан вывод ошибок валидации
PHP
1
2
3
4
5
6
7
8
9
10
    @if(count($errors) > 0)
        <!-- класс фреймворка бутстрап -->
        <div class="alert alert-danger">
            <ul>
                @foreach($errors->all() as $error)
                    <li>{{ $error}}</li>
                @endforeach 
            </ul>
        </div>
    @endif
В контроллере прописано следующее
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
namespace App\Http\Controllers\Admin;
 
use Illuminate\Http\Request;
 
use App\Http\Requests;
 
use App\Http\Requests\ContactRequest;
 
use App\Http\Controllers\Controller;
 
use Validator;
 
class ContactController extends Controller
{
    public function show(Request $request, $id=FALSE) {
        
        if($request->isMethod('post')) {
 
        $validator = Validator::make($request->all(),[
                'name'=>'required'
            ],$messages); 
 
        if($validator->fails()) {
                return redirect()->route('contact')->withErrors($validator)->withInput();
            }       
    }
    }
    }
в web прописано следующее
PHP
1
2
Route::get('/contact',['uses'=>'Admin\ContactController@show','as'=>'contact']);
Route::post('/contact',['uses'=>'Admin\ContactController@store']);
Вроде как все просто, а не работает.
Проблема в том, что если я намеренно не заполню поле name при отправки формы у меня показывает ошибок 0, соответственно не выводятся ошибки валидации. В чем тут может быть проблема?
Тут проблема может еще крыться в том, что если я заполняю все поля формы у меня сохраняется сессия, но если я не заполняю поле name у меня почему-то сессия пустая.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.03.2019, 15:13
Ответы с готовыми решениями:

Ошибки валидации - как исправить?
Подскажите пожалуйста не могу разобраться в скрипте,проверяю через http://validator.w3.org/check...

Ошибки валидации
коллеги, пмогите разобраться, что не так при валидации в W3C Line 113, Column 12: there is no...

Ошибки микроразметки валидации Яндекса
Добрый вечер, подскажите пожалуйста, сделал микроразметку shema.org на странице...

Не выводятся ошибки валидации формы YII
Здравствуйте. Проблема такая: сделал виджет авторизации содержащий обычную форму но со своими css...

Передача клиенту ошибки при валидации данных
Добрый день. Подскажите пожалуйста, как вернуть клиенту ошибку которую он допускает при заполнении...

6
StudAssistant
Эксперт
9811 / 7003 / 2319
Регистрация: 17.04.2006
Сообщений: 9,622
03.03.2019, 15:13
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.
6
MadHatter
129 / 125 / 46
Регистрация: 15.06.2013
Сообщений: 873
05.03.2019, 10:49 2
Сессия не сохраняется, т.к. для передачи данных используется flush. Вы проверяли в представлении что в себя включает ваш массив errors, например с помощью dd?
0
SZV
2 / 2 / 1
Регистрация: 25.12.2016
Сообщений: 104
06.03.2019, 06:38  [ТС] 3
Все таки что такое dd, не могли бы Вы подсказать чуточку по подробнее.
0
AnonymC
1181 / 466 / 87
Регистрация: 23.06.2009
Сообщений: 6,381
Завершенные тесты: 1
09.03.2019, 12:40 4
В роутере нет ни одной строки, который вызывает метод show.
Метод show используется для показа модели и там не правильно показывать ошибки валидации, так как этот метод не предназначен для перехвата запроса POST.

Создайте роут для метода ПОСТ
0
MadHatter
129 / 125 / 46
Регистрация: 15.06.2013
Сообщений: 873
11.03.2019, 06:56 5
https://laravel.com/docs/5.8/helpers#method-dd
0
SZV
2 / 2 / 1
Регистрация: 25.12.2016
Сообщений: 104
12.03.2019, 12:09  [ТС] 6
У меня создан роут в котором указан метод store для Post и валидации
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Route::group(['middleware'=>['web']], function(){
    Route::get('/', ['as'=>'home','uses'=>'Admin\IndexController@show']);
 
Route::get('/about',['uses'=>'Admin\AboutController@show','as'=>'about']);
 
 
Route::get('/articles',['uses'=>'Admin\Core@getArticles','as'=>'articles']);
 
 
Route::get('/article/{id}',['uses'=>'Admin\Core@getArticle','as'=>'article']);
 
Route::get('/contact',['uses'=>'Admin\ContactController@show','as'=>'contact']);
Route::post('/contact',['uses'=>'Admin\ContactController@store']);
});
в контроллере ContactController
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class ContactController extends Controller
{
   
    public function store(Request $request) {
        
        $this->validate($request, [
            'body' => 'required|min:10'
        ]);
            
            dump($request->all());
 
    }
    
    public function show() {
 
        return view('default.contact',['title'=>'Contacts']);
    }
    
}
0
SZV
2 / 2 / 1
Регистрация: 25.12.2016
Сообщений: 104
13.03.2019, 09:38  [ТС] 7
Роут такой
PHP
1
2
3
Route::get('/contact',['uses'=>'Admin\ContactController@show','as'=>'contact']);
 
Route::post('/contact',['uses'=>'Admin\ContactController@store']);
контроллер такой
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?php
 
namespace App\Http\Controllers\Admin;
 
use Illuminate\Http\Request;
 
use App\Http\Requests;
 
use App\Http\Requests\ContactRequest;
 
use App\Http\Controllers\Controller;
 
use Validator;
 
class ContactController extends Controller
{
   
    public function store(Request $request) {
        
    if($request->isMethod('post')) {
            
            $messages = [
            'name.required' => 'Поле обязательное для заполнения!!!',
            ];
            
            $validator = Validator::make($request->all(),[
                'name'=>'required|min:5'
            ],$messages);
            
            $validator->sometimes(['email','site'],'required',function($input) {
                
                //dump($input);
                //exit();
                
                return strlen($input->name) >= 10;
            });
            
            $validator->after(function($validator){
                $validator->errors()->add('name','Дополнительное сообщение');
            });
            
            if($validator->fails()) {
                
                //все ошибки 
                $messages = $validator->errors(); 
                //dump ($messages->all());
                //dump ($messages->first());
                //dump ($validator->errors());
                
                dump($validator->failed());
                exit();
                return redirect()->route('contact')->withErrors($validator)->withInput();
                
            }
        }
 
        return view('default.contact',['title'=>'Contacts']);
        }
    
    public function show() {
 
        return view('default.contact',['title'=>'Contacts']);
    }
    
}
шаблон такой
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
@extends('default.layouts.layout')
 
@section('content')
 
<div class="col-md-9">
 
    <div class="">
        <h2>Contact us!</h2>
    </div>
 
    <p>
    This is a template for a simple marketing or informational website. It includes a large callout called a jumbotron and three supporting pieces of content. Use it as a starting point to create something more unique.
    </p>
    {{ count($errors)}}
    @if(count($errors) > 0)
        <div class="alert alert-danger">
            <ul>
 
                @foreach($errors->all() as $error)
                    <li>{{ $error}}</li>
                @endforeach 
                
            </ul>
        </div>
    @endif
 
    <form method="post" action="{{ route('contact') }}">
    
        {{ csrf_field() }}
      <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
При выполнении скрипта валидация у меня проходить правильно о чем можно говорить по коду
PHP
1
dump ($messages->all()); или dump($validator->failed());
правда если отключить ридерект
PHP
1
return redirect()->route('contact')->withErrors($validator)->withInput();
Проблема в том, что у меня не отображается в шаблоне ошибки
по коду в шаблоне
PHP
1
 {{ count($errors)}}
у меня показывает 0 ошибок, если я пытаюсь пройтись foreach по $messages у меня возникает ошибка, что $messages не известна.
Но как же так? Ведь в контроллере у меня $messages определен и ошибки есть!

Вот где-то простое решение должно быть! Куда у меня ошибки теряются при переходе к шаблону, сам шаблон отрабатывает, что можно проверить по dd

Добавлено через 1 минуту
Благодарю, за подсказку. Применил dd. Шаблон работает. У меня почему-то ошибок 0, куда они теряются не ведомо.

Добавлено через 1 минуту
Может как-то сессию настроить, я не знаю куда теряются ошибки

И "Дополнительное сообщение" оно ведь то-же не отображается.
0
13.03.2019, 09:38
StackOverflow
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2019, 09:38

Ошибки валидации при микроразметке на сайте услуг
Добрый вечер, уважаемые форумчане! Подскажите пожалуйста юному подавану, как справиться с этими...

Не выводятся ошибки валидации в WebForms при использовании ValidationSummary
Уважаемые форумчане, есть код в .aspx файле: &lt;asp:ValidationSummary ID=&quot;validationSummary&quot;...

При ошибки валидации (на стороне сервера) вернуться на модальное окно
Можно ли при ошибки валидации(на стороне сервера) вернуться на модальное окно? Или надо реализовать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru