Laravel – Validation
- Tram Ho
In this article, I would like to share about validation in Laravel framework. The messages in the article are in Japanese. Go my way!
Add Validation
Validate when performing a new creation
When checking validation in laravel just list the content that we want to validate. Below is a part of the source check validation sample when registering an account.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function-definition function">store</span><span class="token punctuation">(</span><span class="token class-name type-declaration">Request</span> <span class="token variable">$request</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token variable">$request</span><span class="token operator">-></span><span class="token property">action</span> <span class="token operator">===</span> <span class="token string single-quoted-string">'back'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token function">redirect</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-></span><span class="token function">route</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'admin.index'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">// Thêm validation </span> <span class="token variable">$rules</span> <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token string single-quoted-string">'admin_code'</span> <span class="token operator">=></span> <span class="token punctuation">[</span><span class="token string single-quoted-string">'required'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'integer'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'unique:admin'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'role'</span> <span class="token operator">=></span> <span class="token punctuation">[</span><span class="token string single-quoted-string">'size:1'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'password'</span> <span class="token operator">=></span> <span class="token punctuation">[</span><span class="token string single-quoted-string">'required'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'string'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'min:8'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'confirmed'</span><span class="token punctuation">]</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token variable">$this</span><span class="token operator">-></span><span class="token function">validate</span><span class="token punctuation">(</span><span class="token variable">$request</span><span class="token punctuation">,</span> <span class="token variable">$rules</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// Thêm tới đây</span> <span class="token variable">$admin</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Admin</span><span class="token punctuation">;</span> <span class="token variable">$admin</span><span class="token operator">-></span><span class="token property">admin_code</span> <span class="token operator">=</span> <span class="token variable">$request</span><span class="token operator">-></span><span class="token property">admin_code</span><span class="token punctuation">;</span> <span class="token variable">$admin</span><span class="token operator">-></span><span class="token property">name</span> <span class="token operator">=</span> <span class="token variable">$request</span><span class="token operator">-></span><span class="token property">name</span><span class="token punctuation">;</span> <span class="token variable">$admin</span><span class="token operator">-></span><span class="token property">role</span> <span class="token operator">=</span> <span class="token variable">$request</span><span class="token operator">-></span><span class="token property">role</span><span class="token punctuation">;</span> <span class="token variable">$admin</span><span class="token operator">-></span><span class="token property">password</span> <span class="token operator">=</span> <span class="token class-name static-context">Hash</span><span class="token operator">::</span><span class="token function">make</span><span class="token punctuation">(</span><span class="token variable">$request</span><span class="token operator">-></span><span class="token property">password</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$admin</span><span class="token operator">-></span><span class="token function">save</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token function">redirect</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-></span><span class="token function">route</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'admin.index'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> |
In the source above, the check validation conditions of the fields are as follows:
admin_code
is required, integer, unique
role
is size
password
is required, string, min, confirmed.
Apply it in practice and try the following error-making operation.
If you do not input the item Admin Code, click the button : Add/追加
Show the message already, Bravo !
By the way, I used auth’s Register.blade.php to create this screen, so the display method is also quite clear and easy to understand.
1 2 3 4 5 6 7 8 9 10 11 12 | {{-- Error message --}} @if ($errors->any()) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif } |
According to the Laravel Documentation, do $error
defined in middleware ShareErrorsFromSession
so we can use it comfortably.
Just apply to the display mechanism, we can display the error message. In addition, if a Password validation error occurs, an error message similar to an alert message will be displayed below the corresponding item.
Here, I would like to share about the error display mechanism in the code below:
1 2 3 4 5 6 7 8 9 10 11 12 | <div class="form-group row"> <label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label> <div class="col-md-6"> <input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password"> @error('password') <span class="invalid-feedback" role="alert"> <strong>{{ $message }}</strong> </span> @enderror </div> </div> |
In class
do check if error message validation at that attribute(password) is equal to @error
(Indicates where the message is displayed) , in case there is a message, display the content of @error
below the corresponding item. Declare the error message at @message
.
And here I will make use to display none(hide) the displayed messages.
1 2 3 4 5 6 7 | <div class="form-group row"> <label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label> <div class="col-md-6"> <input id="password" type="password" class="form-control" name="password"> </div> </div> |
For the Update action, do check validation only with the item that has been input
Normally, if the required item is required, the validation content will not change when doing Update Example : With the item Admin Code, although at the time of Create it is : Unique, but when performing Update, if you want to set the same as the original Admin Code at the beginning, or just Check/Update at the input state (In case the Hash PW is not displayed on the screen).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function-definition function">update</span><span class="token punctuation">(</span><span class="token class-name type-declaration">Request</span> <span class="token variable">$request</span><span class="token punctuation">,</span> <span class="token variable">$id</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token variable">$request</span><span class="token operator">-></span><span class="token property">action</span> <span class="token operator">===</span> <span class="token string single-quoted-string">'back'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token function">redirect</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-></span><span class="token function">route</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'admin.index'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">// validation</span> <span class="token variable">$rules</span> <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token string single-quoted-string">'admin_code'</span> <span class="token operator">=></span> <span class="token punctuation">[</span><span class="token string single-quoted-string">'required'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'integer'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'role'</span> <span class="token operator">=></span> <span class="token punctuation">[</span><span class="token string single-quoted-string">'size:1'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'password'</span> <span class="token operator">=></span> <span class="token punctuation">[</span><span class="token string single-quoted-string">'sometimes'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'nullable'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'string'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'min:8'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'confirmed'</span><span class="token punctuation">]</span> <span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token variable">$this</span><span class="token operator">-></span><span class="token function">validate</span><span class="token punctuation">(</span><span class="token variable">$request</span><span class="token punctuation">,</span> <span class="token variable">$rules</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$admin</span> <span class="token operator">=</span> <span class="token class-name class-name-fully-qualified static-context"><span class="token punctuation">\</span>App<span class="token punctuation">\</span>Admin</span><span class="token operator">::</span><span class="token function">find</span><span class="token punctuation">(</span><span class="token variable">$id</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$admin</span><span class="token operator">-></span><span class="token property">admin_code</span> <span class="token operator">=</span> <span class="token variable">$request</span><span class="token operator">-></span><span class="token property">admin_code</span><span class="token punctuation">;</span> <span class="token variable">$admin</span><span class="token operator">-></span><span class="token property">name</span> <span class="token operator">=</span> <span class="token variable">$request</span><span class="token operator">-></span><span class="token property">name</span><span class="token punctuation">;</span> <span class="token variable">$admin</span><span class="token operator">-></span><span class="token property">role</span> <span class="token operator">=</span> <span class="token variable">$request</span><span class="token operator">-></span><span class="token property">role</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span><span class="token keyword">empty</span><span class="token punctuation">(</span><span class="token variable">$request</span><span class="token operator">-></span><span class="token property">password</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$admin</span><span class="token operator">-></span><span class="token property">password</span> <span class="token operator">=</span> <span class="token class-name static-context">Hash</span><span class="token operator">::</span><span class="token function">make</span><span class="token punctuation">(</span><span class="token variable">$request</span><span class="token operator">-></span><span class="token property">password</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token variable">$admin</span><span class="token operator">-></span><span class="token function">save</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> <span class="token function">redirect</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-></span><span class="token function">route</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'admin.index'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> |
Example : I removed the unique check for admin_code
. Add ‘sometimes’ and ‘nullable’ for password
for the purpose of only checking when input has been performed. With just these small changes, I can handle updating that item, and only updating when the item is set to a value when saving data.
Multi-language processing of messages to Japanese
Next part I will use message in Japanese
Create Japanese files
If pre-created processing files of each language in the resources / lang directory, it will be Localization according to the settings. Folder lang
The default will be as follows:
In the en folder (English), there are the following files: ・auth.php: message displayed when authen login error ・pagination.php: text displayed during pagination ・passwords.php: message displayed when password reset ・validation.php : message displayed during validation etc… When localization, will use the above file or will create it yourself.
Now I will create a folder ja to save the Japanese messgae file.
After converting to Japanese, all messages will be retrieved from the ja folder, so the current file in en will be copied to the ja folder as well.
By the way, put the multilingual files for Japanese in the same folder.
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 | <span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">return</span> <span class="token punctuation">[</span> <span class="token comment">/* |-------------------------------------------------------------------------- | Validation Language Lines |-------------------------------------------------------------------------- | | The following language lines contain the default error messages used by | the validator class. Some of these rules have multiple versions such | as the size rules. Feel free to tweak each of these messages here. | */</span> <span class="token string single-quoted-string">'accepted'</span> <span class="token operator">=></span> <span class="token string single-quoted-string">':attribute は「許可」でなくてはなりません'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'active_url'</span> <span class="token operator">=></span> <span class="token string single-quoted-string">':attribute は有効なURLではありません'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'after'</span> <span class="token operator">=></span> <span class="token string single-quoted-string">':attribute は :date より後の日付にしてください'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'after_or_equal'</span> <span class="token operator">=></span> <span class="token string single-quoted-string">':attribute は :date 以降の日付にしてください'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'alpha'</span> <span class="token operator">=></span> <span class="token string single-quoted-string">':attribute にはアルファベットしか入力できません'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'alpha_dash'</span> <span class="token operator">=></span> <span class="token string single-quoted-string">':attribute には英数字、ハイフン、アンダースコアしか入力できません'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'alpha_num'</span> <span class="token operator">=></span> <span class="token string single-quoted-string">':attribute には英数字しか入力できません'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'array'</span> <span class="token operator">=></span> <span class="token string single-quoted-string">':attribute は配列で入力してください'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'before'</span> <span class="token operator">=></span> <span class="token string single-quoted-string">':attribute は :date より前の日付にしてください'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'before_or_equal'</span> <span class="token operator">=></span> <span class="token string single-quoted-string">':attribute は :date 以前の日付にしてください'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'between'</span> <span class="token operator">=></span> <span class="token punctuation">[</span> <span class="token string single-quoted-string">'numeric'</span> <span class="token operator">=></span> <span class="token string single-quoted-string">':attribute は :min から :max の間の値にしてください'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'file'</span> <span class="token operator">=></span> <span class="token string single-quoted-string">':attribute は :min から :max kbの間のサイズにしてください'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'string'</span> <span class="token operator">=></span> <span class="token string single-quoted-string">':attribute は :min から :max の間の文字にしてください'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'array'</span> <span class="token operator">=></span> <span class="token string single-quoted-string">':attribute は :min から :max の間の項目にしてください'</span><span class="token punctuation">,</span> <span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'boolean'</span> <span class="token operator">=></span> <span class="token string single-quoted-string">':attribute は true か false を入力してください'</span><span class="token punctuation">,</span> <span class="token comment">//Giống bên dưới</span> </span> |
:attribute, :date will become variable.
Multi-language Item name
validation.php can set multi-language (Japanese) for the Item name displayed in the error message.
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* |-------------------------------------------------------------------------- | Custom Validation Attributes |-------------------------------------------------------------------------- | | The following language lines are used to swap our attribute placeholder | with something more reader friendly such as "E-Mail Address" instead | of "email". This simply helps us make our message more expressive. | */ 'attributes' => [], |
Set in array in attributes will look like this.
1 2 3 4 5 6 7 | 'attributes' => [ 'admin_code' => '管理者コード', 'name' => '氏名', 'role' => '権限', 'password' => 'パスワード', ], |
Message after being multilingual for Japanese
The item name displayed in the error message is converted to Japanese. Item on screen is in English, this is set in blade.php.
End !!!
Source: https://qiita.com/apricotcomic/items/acb4fdb8969990034da8#validateを追加する