Я пытаюсь изучить laravel
. Я знаю Codeigniter
. В codeigniter3
я получу форму error как массив с ключом в качестве имени формы, используя функцию
$this -> form_validation -> error_array();
он будет отображаться как
array( 'form_element1' => 'this field is required', 'form_element2' => 'this field is required' )
Есть ли способ в laravel 5 сделать то же самое?
Пожалуйста помоги. Любая помощь может быть оценена
вы можете установить возврат с контроллера
return redirect->back()->withErrors($request->all());
или
return redirect->back()->withErrors(Input::all());
и вы можете печатать ошибки,
@if (count($errors) > 0) <div class="alert alert-danger"> <strong>Whoops!</strong> There were some problems with your input.<br><br> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif
Контроллер Laravel использует свойство ValidatesRequests
которое предоставляет метод validate
. Вот пример того, как проверить запрос:
namespace App\Http\Controllers; class MyController extends Controller { public function store(Request $request) { $this->validate($request, [ 'subject' => 'required|max:255', 'message' => 'required', ]); // All input is valid, do your task. } }
Если пользовательские входы не передают правила $this->validate()
он автоматически перенаправляет пользователя обратно в вид формы со старым вводом и ошибками. Ошибки удерживаются переменной $errors
которая является экземпляром Illuminate\Support\MessageBag
, чтобы отобразить ее на вашем представлении:
@if (count($errors) > 0) <div class="error"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif
Или вы можете получить ошибку по ключу:
@if($errors->has('subject')) {{ $errors->first('subject');}} // Printed: Subject field is required. @endif
Чтобы ответить на вопрос о том, как отображать ошибки, как в CI, вы можете использовать метод toArray()
Illuminate\Support\MessageBag
:
$errors->toArray()
Вы также можете использовать экземпляр валидатора вручную, используя фасад Validator
, например:
namespace App\Http\Controllers; use Validator; class MyController extends Controller { public function store(Request $request) { $validator = Validator::make($request->all(), [ 'subject' => 'required|max:255', 'message' => 'required', ]); if ($validator->fails()) { return redirect('your-form-uri')->withErrors($validator)->withInput(); } // All input is valid, do your task. } }
Снова вы можете получить ошибки от переменной $errors
как указано выше.
Чтобы использовать этот метод, вы можете начать с создания запроса проверки формы с помощью artisan
интерфейса Artisan:
php artisan make:request ContactRequest
Он создаст вам класс ContactRequest
, вы можете найти его в папке app/Http/Request/
.
namespace App\Http\Requests; use App\Http\Requests\Request; class ContactRequest extends Request { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return true; } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ 'subject' => 'required|max:225', 'message' => 'required', ]; } }
В переменной вашего контроллера вместо Request $request
вы можете использовать ContactRequest $request
:
namespace App\Http\Controllers; use App\Http\Requests\ContactRequest; class MyController extends Controller { public function store(ContactRequest $request) { // All input is valid, do your task. } }
Если пользовательский вход проходит, он будет продолжать выполнять свой код по этому методу, иначе пользователь будет перенаправлен обратно в режим просмотра формы, и, конечно, вы можете отображать ошибки так же, как два метода выше.