Я хочу показать ошибку проверки на странице просмотра, пока пользователь вводит неверный ввод. Хорошо, что он ничего не сохраняет в базе данных, а пользователь вводит неверный ввод. Но на странице просмотра пользователя нет сообщения об ошибке. Если кто-нибудь найдет ошибку, пожалуйста, помогите мне.
Вот контроллер:
public function saveUser(Request $request){ $this->validate($request,[ 'name' => 'required|max:120', 'email' => 'required|email|unique:users', 'phone' => 'required|min:11|numeric', 'course_id'=>'required' ]); $user = new User(); $user->name= $request->Input(['name']); $user->email= $request->Input(['email']); $user->phone= $request->Input(['phone']); $user->date = date('Ym-d'); $user->completed_status = '0'; $user->course_id=$request->Input(['course_id']); $user->save(); return redirect('success'); }
Вот маршрут:
Route::group(['middleware' => 'web'], function () { Route::get('/', function () { return view('index'); })->name('main'); Route::post('/saveUser',[ 'uses' => 'AppController@saveUser', 'as'=>'saveUser', ]); });
Вот страница просмотра лезвия:
@extends('layouts.master') @section('title') Create User @endsection @section('content') @include('partials.message-block') <div class="container" > <h3> Student Register </h3> {!! Form::open(array('route' => 'saveUser','class'=>'form-horizontal','method'=>'POST')) !!} {!! Form::token(); !!} {!! csrf_field() ; !!} <div class="form-group"> <label>Name</label> <input type="text" name="name" class="form-control" required placeholder="Name"> </div> <div class="form-group"> <label>Email</label> <input type="email" name="email" class="form-control" required placeholder="email"> </div> <div class="form-group"> <label>Phone Number</label> <input type="text" name="phone" class="form-control" required placeholder="phone"> </div> <div class="form-group"> <label for="">Class</label> <select class="form-control input-sm" name="course_id" > @foreach($input as $row) <option value="{{$row->id}}">{{$row->name}}</option> @endforeach </select> </div> <button type="submit" class="btn btn-default">Submit</button> {!! Form::close() !!} </div> @endsection
И вот блок сообщений об ошибке:
@if(count($errors) > 0) <div class="row"> <div class="col-md-4 col-md-offset-4 error"> <ul> @foreach($errors->all() as $error) <li>{{$error}}</li> @endforeach </ul> </div> </div> @endif @if(Session::has('message')) <div class="row"> <div class="col-md-4 col-md--offset-4 success"> {{Session::get('message')}} </div> </div> @endif
Попробуйте удалить web
промежуточное программное обеспечение, если вы используете 5.2.27 или выше. Дело в том, что теперь Laravel автоматически применяет web
промежуточное ПО ко всем маршрутам внутри routes.php
и если вы пытаетесь добавить его вручную, вы можете получить ошибки.
app/Providers/RouteServiceProvider.php
версии 5.2.27 теперь добавляет сетевое промежуточное ПО ко всем маршрутам внутри routes.php
:
protected function mapWebRoutes(Router $router) { $router->group([ 'namespace' => $this->namespace, 'middleware' => 'web', ], function ($router) { require app_path('Http/routes.php'); }); }
Используйте строку ниже в вашем контроллере
использовать валидатор;
Добавьте ниже код в функцию контроллера, где отправляется ваш запрос.
$validator = Validator::make($request->all(), [ 'fname' => 'required|max:20|min:4', 'uemail' => 'required|email', 'message' => 'required', ]); if ($validator->fails()) { $messages = $validator->messages(); return Redirect::back()->withErrors($messages)->withInput($request->all()); }
На вашей странице просмотра
@if ($errors->any()) <label for="fname" class="error">{{ $errors->first('fname') }}</label> @endif
Для отображения индивидуальной ошибки поля.