Both sides previous revision Previous revision Next revision | Previous revisionLast revisionBoth sides next revision |
getting_started_with_laravel [03.12.2020 15:39] – [Form validation] Pascal Suter | getting_started_with_laravel [04.12.2020 11:19] – [dump / dump and die] Pascal Suter |
---|
<code php> | <code php> |
public function store(Request $request){ | public function store(Request $request){ |
$validateData = $request->validate([ | $validData = $request->validate([ |
'name' => ['required', 'string', 'max:255'], | 'name' => ['required', 'string', 'max:255'], |
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], | 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], |
</code> | </code> |
there are many [[https://laravel.com/docs/8.x/validation#available-validation-rules|validation rules]] available already in Laravel and custom rules can be added if needed. | there are many [[https://laravel.com/docs/8.x/validation#available-validation-rules|validation rules]] available already in Laravel and custom rules can be added if needed. |
| |
| also note, that the ''$validData'' variable now contains an array with the validated data in a format that is compatible with the ''create'' methods for the laravel models. So if you set up your model's ''$fillable'' property correctly and your form field names correspond to your database field names, you can pass this array straight to the ''create()'' method of your model and create a new database entry like that! |
| |
now here are a few cool things about the validator: | now here are a few cool things about the validator: |
* in addition to bringing the user back to the form, laravel will provide an ''$error'' variable which can be used in the balde | * in addition to bringing the user back to the form, laravel will provide an ''$error'' variable which can be used in the balde |
* even better, there is a ''@error(fieldname)'' blade syntax which will do whatever follows after it if the specified field is invalid | * even better, there is a ''@error(fieldname)'' blade syntax which will do whatever follows after it if the specified field is invalid |
| * you also get a ''old(fieldname)'' function which you can use to populate your input fields with the original inputs, so the user won't have to enter eveything again.. see the eample below. |
here's an example part of a blade with a form that will show some info if the validation fails: | here's an example part of a (bootstrap based) blade with a form that will show some info if the validation fails: |
| |
<code html> | <code html> |
<div class="form-group col-12"> | <div class="form-group col-12"> |
<label for="inputName">Name</label> | <label for="inputName">Name</label> |
<input type="text" class="form-control @error('name') is-invalid @enderror" id="inputName" name="name"> | <input type="text" class="form-control @error('name') is-invalid @enderror" id="inputName" name="name" value="{{ old('name') }}"> |
<div class="invalid-feedback">Please enter your name here</div> | <div class="invalid-feedback">Please enter your name here</div> |
</div> | </div> |
| |
===== Tricks ===== | ===== Tricks ===== |
| ==== dump / dump and die ==== |
| this has to be the first tip :) .. there is a helper function called ''dd()'' which stands for ''dump and die''. it dumps a variable and then stops further execution of the script. this is of course extremely helpful when learning stuff and trying out things. |
| |
| you may not always want to stop the execution, so another helper called ''dump()'' comes in handy here. it produces the same output but contines the execution of your script |
| |
| to use those helpers in a blade, there are special blade syntax helpers available which make it even easier: |
| <code>@dump($__data)</code> |
| for example dumps all defined variables. there is also a ''@dd()'' helper available. |
| |
| note that using <code>{{ dump($__data) }}</code> won't work. there is a detailed explanation why [[https://stackoverflow.com/questions/48731507/laravel-dump-unexpected-output|on stackexchange]] |
==== Create Model + Controller + Migration all in one step ==== | ==== Create Model + Controller + Migration all in one step ==== |
artisan make:model Pizza -mc | artisan make:model Pizza -mc |
@extends('layouts.mylaout', [ 'title' => "Details for ".$section->name, 'image' => 'section_details.jpg' ]) | @extends('layouts.mylaout', [ 'title' => "Details for ".$section->name, 'image' => 'section_details.jpg' ]) |
</code> | </code> |
and in the layout you would then simply use ''{{ $title }}'' to echo the title you passed along. | and in the layout you would then simply use <code>{{ $title }}</code> to echo the title you passed along. |
| |
=== 2.) create a mini-section === | === 2.) create a mini-section === |