Laravel - The Basics - Validation

# Introduction

學習一個框架, Ray 的想法是, 在深入理解底層實作的原理之前, 應該先知道這個框架的 使用方法; 先學習怎麼使用這個前人造的輪子, 再學習怎麼樣一個輪子。
所以本篇文章重點在於細讀官方文件, 並將內容理解後以 Q&A 的方式記錄下來, 加速學習以及查詢。




# Validation Quickstart

# Writing The Validation Logic

在 Laravel validation 中, 如果請求的是 HTTP request, 那 validation 會回什麼?

redirect response

在 Laravel validation 中, 如果請求的是 AJAX request, 那 validation 會回什麼?

JSON response

Laravel validation rules 可以用哪兩種方式指定?
  • | delimited string
  • array
Laravel 中, 當我驗證 $request 時, 如果我想要指定其 errorBag, 在以下的範例中, 我可以怎麼修改?
  • Example:

    <?php
    $request->validate([
    'title' => ['required', 'unique:posts', 'max:255'],
    'body' => ['required'],
    ]);
  • Answer:

    <?php
    $request->validateWithBag('blog', [
    'title' => ['required', 'unique:posts', 'max:255'],
    'body' => ['required'],
    ]);


# Stopping On First Validation Failure

在下面的 Laravel validation 中, 當驗證 title 時, 如果我想要讓 validation 在 unique 沒通過時就停下, 不再繼續驗 max, 那我可以怎麼做?
  • 範例程式碼:

    <?php
    $request->validate([
    'title' => 'required|unique:posts|max:255',
    'body' => 'required',
    ]);
  • Answer:

    <?php
    $request->validate([
    'title' => 'bail|required|unique:posts|max:255',
    'body' => 'required',
    ]);


# A Note On Nested Attributes

Laravel validation 中, 如果 request 裡頭有巢狀的參數, 舉例來說, 我想要驗 author 下的 name 以及 description, 都要是 required 那我可以怎麼做?
<?php
$request->validate([
'title' => 'required|unique:posts|max:255',
'author.name' => 'required',
'author.description' => 'required',
]);


# Displaying The Validation Errors

Laravel validation 中, 我們不需要特別的 bind error message 以及 GET route, 但卻能夠把 error message 帶過去, 為什麼?

因為 Laravel 將 error message 放在 flash session 當中

Laravel validation 中, $errors 變數是什麼的 instance?

Illuminate\Support\MessageBag

Laravel validation 中, $errors 變數是被哪一個 middleware 將之與 view 連接在一起?

Illuminate\View\Middleware\ShareErrorsFromSession

Laravel 中, 如果我想要在 view 中顯示 errors, 我可以怎麼做?
<!-- /resources/views/post/create.blade.php -->

<h1>Create Post</h1>

@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif

<!-- Create Post Form -->


# The @error Directive

涉及前端, 目前尚不熟, 待日後學習前端時補上


# A Note On Optional Fields

Laravel 中, 空的 string 會被轉化成 null, 這是為什麼?

因為以下兩個 global middleware

  • TrimStrings
  • ConvertEmptyStringsToNull
Laravel validation 當中, 如果我要一直 input 是允許 null 的, 我可以加入哪一個 rule?

nullable




# Form Request Validation

# Creating Form Requests

Laravel 中, 如果我要用 CLI 建立一個 “form request”, 我可以怎麼做?
php artisan make:request StoreBlogPort
Laravel validation 當中, 我已經建立了一個 “form request”, 如果我想要加入驗證規則的話, 我可以怎麼做?
<?php
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'title' => 'required|unique:posts|max:255',
'body' => 'required',
];
}
在以下的 Laravel validation “form request” 當中, 如果在 rule method 當中我需要一些 dependency, 那我可以怎麼做?
  • form request:

    <?php
    /**
    * Get the validation rules that apply to the request.
    *
    * @return array
    */
    public function rules()
    {
    return [
    'title' => 'required|unique:posts|max:255',
    'body' => 'required',
    ];
    }
  • Answer:
    直接用 type-hint 加到 parameters 裏頭

在我建立一個 Laravel validation “form request” 後, 我該怎麼使用它呢?

在 controller method type hint 這個 “form request”

<?php
/**
* Store the incoming blog post.
*
* @param StoreBlogPost $request
* @return Response
*/
public function store(StoreBlogPost $request)
{
// The incoming request is valid...

// Retrieve the validated input data...
$validated = $request->validated();
}

以下的 validation “form request” 中, 如果我要拿到驗證過的 request, 我可以怎麼做?
  • 範例程式碼:

    <?php
    /**
    * Store the incoming blog post.
    *
    * @param StoreBlogPost $request
    * @return Response
    */
    public function store(StoreBlogPost $request)
    {
    // The incoming request is valid...
    }
  • Answer:

    <?php
    /**
    * Store the incoming blog post.
    *
    * @param StoreBlogPost $request
    * @return Response
    */
    public function store(StoreBlogPost $request)
    {
    // The incoming request is valid...

    // Retrieve the validated input data...
    $validated = $request->validated();
    }
在 Laravel validation “form request” 當中, 如果我想要在 validate 之後再做額外的驗證, 我可以怎麼做?
<?php
/**
* Configure the validator instance.
*
* @param \Illuminate\Validation\Validator $validator
* @return void
*/
public function withValidator($validator)
{
$validator->after(function ($validator) {
if ($this->somethingElseIsInvalid()) {
$validator->errors()->add('field', 'Something is wrong with this field!');
}
});
}
在 Laravel validation “form request” 當中, 如果我想要在 validate 之後再做額外的驗證, 我可以在 “form request” 當中使用哪一個 method?

withValidator


# Authorizing Form Requests

Laravel 中, 如果我想要在 “form requests” 當中驗證一個 user 是否有相關 policy 定義的存取權限, 我可以使用哪一個 method?

authorize()

Laravel 中, 如果 “form request” 中的 authorize method return false, Laravel 會直接回什麼樣的 Response?

403

Laravel 中, 如果我不打算使用 “form request” 中的 authorize, 我想在其他地方驗證權限部分, 那我必須要讓 authorize method return 什麼 response?

true


# Customizing The Error Messages

在 Laravel 中, 如果我要客製化 “form request” 的錯誤訊息, 我可以使用哪一個 method?

messages

在 Laravel 中, 如果我要客製化 “form request” 的錯誤訊息, 比如說, column title, 規則是 required, message 是 A title is required, 那我可以怎麼做?
<?php
/**
* Get the error messages for the defined validation rules.
*
* @return array
*/
public function messages()
{
return [
'title.required' => 'A title is required',
'body.required' => 'A message is required',
];
}


# Customizing The Validation Attributes

當我使用 Laravel validation 的 “form request” 時, 在以下的 Laravel validation response 當中, 如果我想要讓 response 的 email 變成 test email, 那我在 哪裏 使用 哪一個 method?
  • 範例 response:

    {
    "message": "The given data was invalid.",
    "errors": {
    "username": [
    "The username field is required when email is not present."
    ],
    "email": [
    "The email field is required when username is not present."
    ]
    }
    }
  • Answer:

    • form request
    • 使用 attributes method
當我使用 Laravel validation 的 “form request” 時, 在以下的 Laravel validation response 當中, 如果我想要讓 response 的 email 變成 test email, 那我在 form request 中怎麼做?
  • 範例 response:

    {
    "message": "The given data was invalid.",
    "errors": {
    "username": [
    "The username field is required when email is not present."
    ],
    "email": [
    "The email field is required when username is not present."
    ]
    }
    }
  • Answer:

    <?php
    /**
    * Get custom attributes for validator errors.
    *
    * @return array
    */
    public function attributes()
    {
    return [
    'email' => 'test email',
    ];
    }


# Prepare Input For Validation

Laravel validation “form request” 中, 如果我想要讓 request 在被驗證之前先被處理過, 舉例來說, 我想要使用 Str::slug() 來處理 request 中的 slug, 我可以怎麼做?
<?php
use Illuminate\Support\Str;

/**
* Prepare the data for validation.
*
* @return void
*/
protected function prepareForValidation()
{
$this->merge([
'slug' => Str::slug($this->slug),
]);
}
Laravel validation “form request” 中, 如果我想要讓 request 在被驗證之前先被處理過, 我可以在 “form request” 中使用 哪一個 method?

prepareForValidation()




# Manually Creating Validators

以下的 Laravel 範例程式碼是什麼意思?
  • 範例程式碼:

    <?php

    namespace App\Http\Controllers;

    class PostController extends Controller
    {

    public function store(Request $request)
    {
    $validator = Validator::make($request->all(), [
    'title' => 'required|unique:posts|max:255',
    'body' => 'required',
    ]);

    if ($validator->fails()) {
    return redirect('post/create')
    ->withErrors($validator)
    ->withInput();
    }

    // Store the blog post...
    }
    }
  • Answer:

    <?php

    namespace App\Http\Controllers;

    class PostController extends Controller
    {

    public function store(Request $request)
    {
    // 手動建立一個 validator, make 的第一個 parameter 為 request, 第二個為 rules
    $validator = Validator::make($request->all(), [
    'title' => 'required|unique:posts|max:255',
    'body' => 'required',
    ]);

    // 如果 validator 驗證失敗
    if ($validator->fails()) {
    // 重導向 post/create
    return redirect('post/create')
    // 將 error 存到 session
    ->withErrors($validator)
    // 將指定的 input 存到 session, 若有帶則為帶入的 input array, 若沒帶則為 request->input, 可參考 https://github.com/laravel/framework/blob/6.x/src/Illuminate/Http/RedirectResponse.php#L74
    ->withInput();
    }

    // Store the blog post...
    }
    }
Laravel validation 中, 什麼情況之下我會需要手動建立一個 validator?

如果我想要控制 驗證到錯誤之後要做些什麼事 的情況

以下的 Laravel example code 的意思是?
  • Example:

    <?php

    namespace App\Http\Controllers;

    class PostController extends Controller
    {

    public function store(Request $request)
    {
    $validator = Validator::make($request->all(), [
    'title' => 'required|unique:posts|max:255',
    'body' => 'required',
    ]);

    if ($validator->fails()) {
    return redirect('post/create')
    ->withErrors($validator)
    ->withInput();
    }

    // Store the blog post...
    }
    }
  • Answer:
    一般來說, 如果使用 validate(), Laravel 預設會 return 相對應的 error, 使用 $validator->fails() 可以客製化抓到錯誤之後的動作


# Automatic Redirection

以下的 Laravel 程式碼中, 我們手動建立了一個 validator, 如果我要讓這個 validator 有自動跳轉 (HTTP request)或回應 JSON(AJAX request) 的功能, 我可以怎麼做?
  • 程式碼:

    <?php
    Validator::make($request->all(), [
    'title' => 'required|unique:posts|max:255',
    'body' => 'required',
    ]);
  • Answer:

    <?php
    Validator::make($request->all(), [
    'title' => 'required|unique:posts|max:255',
    'body' => 'required',
    ])->validate();


# Named Error Bags

在 Laravel 中, $errors 是 MessageBag 的 instance, 試想, 如果我的前端頁面有多個 form, 而我必須給不同的 MessageBag 一個名字的話, 那我可以怎麼做? 重導向 register 並且命名 MessageBag 為 login
<?php
return redirect('register')
->withErrors($validator, 'login');
在 Laravel 中, 假如我現在在前端頁面, 而我要從 $error 中取得名為 login 的 MessageBag instance 裡頭的 email, 我可以怎麼做?
{{ $errors->login->first('email') }}


# After Validation Hook

以下的 Laravel example code 的意思是?
  • Example:

    <?php
    $validator = Validator::make(...);

    $validator->after(function ($validator) {
    if ($this->somethingElseIsInvalid()) {
    $validator->errors()->add('field', 'Something is wrong with this field!');
    }
    });

    if ($validator->fails()) {
    //
    }
  • Answer:

    <?php
    // 自訂一個 validator
    $validator = Validator::make(...);

    // 在通過 validation rules 的驗證後, 在驗證其他 custom 的 rule
    $validator->after(function ($validator) {
    if ($this->somethingElseIsInvalid()) {
    $validator->errors()->add('field', 'Something is wrong with this field!');
    }
    });

    // 判斷驗證結果
    if ($validator->fails()) {
    //
    }
在 Laravel validation 中, 假如我在 Controller 建立一個 validator 如下, 而我想要在驗證完成之後, 在自己加入額外的邏輯驗證, 我可以怎麼做?
  • 範例程式碼:

    <?php
    $validator = Validator::make(...);

    if ($validator->fails()) {
    //
    }
  • Answer:




# Working With Error Messages

Laravel 中, 如果我呼叫 validatorerrors method, 我會拿到 哪一個 class 的 instance?

Illuminate\Support\MessageBag

Laravel 中, $errors 這個全域變數是 哪一個 class 的 instance?

Illuminate\Support\MessageBag


# Retrieving The First Error Message For A Field

以下的 Laravel example code 的意思是?
  • Example:

    <?php
    $errors = $validator->errors();

    echo $errors->first('email');
  • Answer:
    取得 email 欄位的第一項錯誤


# Retrieving All Error Messages For A Field

從以下的 Laravel 程式碼中, 我們拿到了 $errors, 假設我驗了 email 欄位很多項規則, 現在我想要拿到 email 欄位的所有錯誤訊息, 我可以怎麼做?
  • 範例程式碼:

    <?php
    $errors = $validator->errors();
  • Answer:

    <?php
    $errors = $validator->errors();

    foreach ($errors->get('email') as $message) {
    //
    }
從以下的 Laravel 程式碼中, 我們拿到了 $errors, 假設 attachments 這個欄位是一個 array, 而我要取得這個 array 下所有 elements 的錯誤訊息, 我可以怎麼做?
  • 範例程式碼:

    <?php
    $errors = $validator->errors();
  • Answer:

    <?php
    $errors = $validator->errors();

    foreach ($errors->get('attachments.*') as $message) {
    //
    }


# Retrieving All Error Messages For All Fields

從以下的 Laravel 程式碼中, 我們拿到了 $errors, 假設現在我要取得所有驗證過的欄位的所有錯誤訊息, 我可以怎麼做?
  • 範例程式碼:

    <?php
    $errors = $validator->errors();
  • Answer:

    <?php
    $errors = $validator->errors();

    foreach ($errors->all() as $message) {
    //
    }


# Determining If Messages Exist For A Field

如以下的 Laravel 程式碼, 我已經拿到了 $errors, 如果說現在我想要判斷某個特定欄位是否有錯誤, 我可以怎麼做?
  • 程式碼:

    <?php
    $errors = $validator->errors();
  • Answer:

    <?php
    $errors = $validator->errors();
    if ($errors->has('email')) {
    //
    }


# Custom Error Messages

以下的 Laravel example code 的意思是?
  • Example:

    <?php
    $messages = [
    'required' => 'The :attribute field is required.',
    ];
  • Answer:
    客製化驗證錯誤時的訊息, :attribute 代表 $request 中的 input 名稱

Laravel validation 中, 如果說我想要客製化錯誤訊息, 已有訊息如下, 那我該把這個訊息放到 哪一個 method 的 第幾個 argument?
  • 程式碼:

    <?php
    $messages = [
    'required' => 'The :attribute field is required.',
    ];
  • Answer:

    • validator
    • 第三個
Laravel validation 中, 如果說我想要客製化錯誤訊息, 已有訊息如下, 那我可以怎麼做?
  • 錯誤訊息:

    <?php
    $messages = [
    'required' => 'The :attribute field is required.',
    ];
  • Answer:

    <?php
    $messages = [
    'required' => 'The :attribute field is required.',
    ];

    $validator = Validator::make($input, $rules, $messages);
Laravel validation 中, 如果我想要查詢各種在錯誤訊息中代表的相對應的 field, 我可以到哪一個檔案查詢?

resources/lang/xx/validation.php, xx = 語言種類, 比如說, en


# Specifying A Custom Message For A Given Attribute

Laravel validation 中, 如果我想要客製化錯誤訊息, 已有明確的欄位為 email, 規則為 required, 訊息內容為 We need to know your e-mail address!, 那我可以怎麼做?
<?php
$messages = [
'email.required' => 'We need to know your e-mail address!',
];


# Specifying Custom Messages In Language Files

Laravel validation 中, 如果我要全域的客製化錯誤訊息, 可以在哪一個檔案中做修改?

resources/lang/xx/validation.php, xx = 語言種類, 比如說, en

Laravel validation 中, 如果我要全域的客製化錯誤訊息, 可以在 resources/lang/xx/validation.php 檔案中怎樣修改??
<?php
'custom' => [
'email' => [
'required' => 'We need to know your e-mail address!',
],
],


# Specifying Custom Attributes In Language Files

Laravel validation 中, 如果我想要全域的修改 attribute, 比如說, 將 email 替換成 email address, 可以在哪一個檔案中做修改?

resources/lang/xx/validation.php

Laravel validation 中, 如果我想要全域的修改 attribute, 比如說, 將 email 替換成 email address, 可以在 resources/lang/xx/validation.php 檔案中怎樣修改?
<?php
'attributes' => [
'email' => 'email address',
],


# Specifying Custom Values In Language Files

在以下的 Laravel validation 程式碼中, 錯誤訊息會是 The credit card number field is required when payment type is cc., 如果我想要 global 的將 cc 替換成 credit card, 那我可以在哪一個檔案中修改?

resources/lang/xx/validation.php

在以下的 Laravel validation 程式碼中, 錯誤訊息會是 The credit card number field is required when payment type is cc., 如果我想要 global 的將 cc 替換成 credit card, 那我可以在檔案 resources/lang/xx/validation.php 中怎樣修改?
<?php
'values' => [
'payment_type' => [
'cc' => 'credit card'
],
],




# Available Validation Rules

# accepted

Laravel validation 中, 如果我要驗證一個 input 的 value 必須是 yes, on, 1, 或 true, 那我可以使用哪一個 rule?

accepted

# active_url

Laravel validation 中, 如果我要驗證一個 input 的 value 必須是一個 url, 經過 DNS 正解之後必須是 A 或 AAAA record, 我可以使用哪一個 rule?

active_url

# after:date

以下的 Laravel Validation example code 的意思是?
  • Example:

    <?php
    'start_date' => 'required|date|after:tomorrow'
  • Answer:
    input start_date 必須 present 及 filled, 須符合 date format, 且日期需在明天之後

Laravel validation 中, 如果我已經驗證了一個 input 的 value 須為日期如下, 那現在我想要驗證另外一個 input 的 value 須為日期, 且此日期須在第一個驗證的日期之後, 那我可以怎麼做?
  • 第一個 input validation:

    <?php
    'start_date' => 'required|date|after:tomorrow'
  • Answer:

    <?php
    'finish_date' => 'required|date|after:start_date'

# after_or_equal:date

Laravel validation 中, 如果我要驗證一個 input 必須跟我指定的一個日期相等, 或在指定的日期之後, 那我可以怎麼做?
<?php
'start_date' => 'required|date|after_or_equal:tomorrow'


# alpha

Laravel 中, 如果我要驗證一個 input 單純由字母所組成, 我可以使用哪一個 validation rule?

alpha


# alpha_dash

Laravel 中, 如果我驗證一個 input 只可含有 字母, 數字, -_, 我可以使用哪一個 validation rule?

alpha_dash


# alpha_num

Laravel 中, 如果我驗證一個 input 只可含有 字母, 數字, 我可以使用哪一個 validation rule?

alpha_num


# array

Laravel 中, 如果我要驗證一個 input 必須是一個 array, 我可以使用哪一個 validation rule?

array


# before:date

Laravel 中, 如果我要驗證一個 input 必須是在某個指定的日期之前, 我可以使用哪一個 validation rule?

before:date


# before_or_equal:date

Laravel 中, 如果我要驗證一個 input 必須是相等於某個指定的日期, 或在這個日期之前, 那我可以使用哪一個 validation rule?

before_or_equal:date


# between:min,max

Laravel 中, 如果我要驗證一個 input 必須是介於兩個數值之間, 這兩個數值可以是 string, number, array 或 files, 我可以使用哪一個 validation rule?

between:min,max


# boolean

Laravel 中, 如果我要驗證一個 input 必須是 boolean, 即 true, false, 1, 0, "1", 或 "0", 那我可以使用哪一個 validation rule?

boolean


# confirmed

Laravel 中, 如果我在 password input 使用了 confirmed rule, 那我必須還要有另外一個 input 的名稱叫做什麼?

password_confirmation

Laravel 中, 如果我想要驗證兩個 input 必須有一模一樣的 value, 舉例來說, 讓用戶輸入密碼以及再次輸入密碼來確保用戶沒有不小心輸入錯誤, 那我可以使用哪一個 validation rule?

confirmed


# date

Laravel 中, 如果我要驗證一個 input 必須是 non-relative 的日期格式, 那我可以使用哪一個 validation rule?

date


# date_equals:date

Laravel中, 如果我要驗證一個 input 必須是一個日期且需與指定的日期相同, 那我可以使用哪一個 validation rule?

date_equals:date


# date_format:format

Laravel 中, 如果我要驗證一個 input 需跟我指定的日期格式相同, 那我可以使用哪一個 validation rule?

date_format:format

Laravel validation rule 當中, date_format 與 date 可否混用?

不可


# different:field

Laravel validation 中, 如果我要驗證兩個 input 的 value 必須要是不同的, 那我可以使用哪一個 validation rule?

different:field


# digits:value

Laravel 中, 如果我要驗證一個 input 必須是 numeric, 且需與指定的位數一樣, 不可負數, 那我可以使用哪一個 validation rule?

digits:value

Laravel validation rule 中, digits:value 這個 rule 可否含有小數點?

不可

Laravel validation rule 中, digits:value 這個 rule 可否含有負數?

不可


# digits_between:min,max

Laravel 中, 如果我要驗證一個 input 必須為 numeric, 且長度須介於我指令的兩個 value, 那我可以使用哪一個 validation rule?

digits_between:min,max


# dimensions

Laravel 中, 如果我要驗證一個 input 必須是一個 image, 且尺寸須 100% 符合我指定的長寬及比例, 我可以使用哪一個 validation rule?

dimensions:width=width,height=height

Laravel 中, 如果我要驗證一個 input 必須是一個 image, 且尺寸須介於我指定的長寬及比例, 我可以使用哪一個 validation rule?

dimensions:min_width=minWidth,max_width=maxWidth,min_height=minHeight,max_height=maxHeight,ratio=ratio1/ratio2

Laravel 中, 如果我要用 rule 的方式來使用 dimensions rule, 我可以怎麼做?

Rule::dimensions()->maxWidth(1000)->maxHeight(500)->ratio(3 / 2)


# distinct

Laravel 中, 假如我要驗一個 input, 這個 input 是一個 array, 我要確保 array 下的 field 的 value 必須不可重複, 舉例來說, foo array 下 不同 element 的 id field 的 value 必須不可相同, 我可以使用哪一個 validation rule?

distinct


# email

Laravel 中, 如果我要驗證一個 input, 其 value 必須是 email 格式, 我可以使用哪一個 validation rule?

email

Laravel 中, 可以使用不同的規則驗證 email 嗎?

可以, 可參考官方文件

Laravel 中, validation email rule 預設使用哪一個 validation?

RFCValidation


# ends_with:foo,bar,…

Laravel 中, 如果我要驗證 input 必須是指定的 value 結尾, 我可以使用哪一個 validation rule?

ends_with


# exclude_if:anotherfield,value

Laravel 中, 如果我想要讓 input 的內容可以被 validate 以及 validated 排除, 當另外一個指定的 field 的 value 跟我指定的是相同的, 那我可以使用哪一個 validation rule?

exclude_if:anotherfield,value


# exclude_unless:anotherfield,value

Laravel 中, 如果我要預設就讓一個指定的 input 被 validate 以及 validated 排除驗證, 除非另外一個 field 的 value 跟我指定的是一樣的, 那我可以使用哪一個 validation rule?

exclude_unless:anotherfield,value


# exists:table,column

Laravel 中, 如果我要驗證一個 input, 這個 input 必須存在於指定的 table 中的指定 column, 那我可以使用哪一個 validation rule?

exists:table,column

Basic Usage Of Exists Rule
以下的 Laravel validation rule 當中, 什麼情況之下可以不需指定 column 名稱?
  • validation rule:

    <?php
    'state' => 'exists:states'
  • Answer:
    當 input 的 field 名稱跟 column 一樣時

Specifying A Custom Column Name
以下的 Laravel validation rule 當中, 第二個 argument 代表什麼?
  • validation rule:

    <?php
    'state' => 'exists:states,abbreviation'
  • Answer:
    指定該 table 中的 column

Laravel 的 exists validation rule 中, 如果我要指定 connection, 該怎麼做? 比如說, connection 為 test, table 為 staff, column 為 email
<?php
'email' => 'exists:connection.staff,email'
Laravel 中, exists validation rule 可以指定 model 來代替 table name 嗎?

可以哦

Laravel 中, 如果我要使用 model name 來定義 exists validation rule, 我可以怎麼做?
<?php
'user_id' => 'exists:App\User,id'
Laravel 中, 如果我要驗證帶入的 email 必須存在於 staff table, 且其 account_id 欄位的值需為 1, 那我可以怎麼做?
<?php
use Illuminate\Validation\Rule;

Validator::make($data, [
'email' => [
'required',
Rule::exists('staff')->where(function ($query) {
$query->where('account_id', 1);
}),
],
]);
以下的 Laravel validation rule 代表什麼意思?
  • validation rule:

    <?php
    use Illuminate\Validation\Rule;

    Validator::make($data, [
    'email' => [
    'required',
    Rule::exists('staff')->where(function ($query) {
    $query->where('account_id', 1);
    }),
    ],
    ]);
  • Answer:
    驗證 email input 需存在於 staff table, 且期 account_id column 須為 1


# file

Laravel 中, 如果我要驗一個 input 必須是 file, 那我可以使用哪一個 validation rule?

file


# filled

Laravel 中, 如果我要驗一個 input, 內容不可為 empty, 我可以使用哪一個 validation rule?

filled


# gt:field

Laravel 中, 如果我要驗一個 input, 其 value 必須大於另外一個指定的 input, 我可以使用哪一個 validation rule?

gt:field


# gte:field

Laravel 中, 如果我要驗一個 input, 其 value 必須大於或等於另外一個指定的 input, 我可以使用哪一個 validation rule?

gte:field


# image

Laravel 中, 如果我要驗一個 input, 其 value 必須是一個 image, 即 jpeg, png, bmp, gif, svg, webp, etc…, 我可以使用哪一個 validation rule?

image


# in:foo,bar,…

Laravel 中, 如果我要驗一個 input, 其 value 必須要被你指定的 value list 包含在內, 那我可以使用哪一個 validation rule?

in:foo,bar,…

以下的 Laravel example code 的意思是?
  • Example:

    <?php
    use Illuminate\Validation\Rule;

    Validator::make($data, [
    'zones' => [
    'required',
    Rule::in(['first-zone', 'second-zone']),
    ],
    ]);
  • Answer:
    指定 input ‘zones’ 的 value 必須為 ‘first-zone’, 或 ‘second-zone’, 同資料庫中 enum type 的概念

Laravel 中, 如果我要使用 Rule 來定義一個 in 規則, 我可以怎麼做?


# in_array:anotherfield.*

Laravel 中, 如果我要驗證一個 input, 其 value 必須被 另外一個 input 的 value 包含在內, 所以說另外一個 input 的 value 可能會是一個 array, 那我可以使用哪一個 validation rule?

in_array:anotherfield.*


# integer

Laravel 中, 如果我要驗一個 input, 其 value 必須是一個 integer, 我可以使用哪一個 validation rule?

integer

Laravel 中, validation rule integer, 會去驗證 input 的型別是否是 integer 嗎?

不會

Laravel 中, validation rule integer, 實際上是驗證什麼?

string 或是有著 數字的 string, 換句話說, 若是全數字的 string 也算通過


# ip

Laravel 中, 如果我要驗一個 input 是否一個 IP address, 我可以使用哪一個 validation rule?

ip


# ipv4

Laravel 中, 如果我要驗一個 input, 其 value 是否符合 IPv4 address 格式, 我可以使用哪一個 validation rule?

ipv4


# ipv6

Laravel 中, 如果我要驗一個 input, 其 value 是否符合 IPv6 address 格式, 我可以使用哪一個 validation rule?

ipv6


# json

Laravel 中, 如果我要驗一個 input, 其 value 是否為一個 json 字串, 我可以使用哪一個 validation rule?

json


# lt:field

Laravel 中, 如果我要驗一個 input, 其 value 必須小於另外一個指定的 input, 我可以使用哪一個 validation rule?

lt:field


# lte:field

Laravel 中, 如果我要驗一個 input, 其 value 必須小於或等於另外一個指定的 input, 我可以使用哪一個 validation rule?

lte:field


# max:value

Laravel 中, 如果我要驗一個 input, 其 value 必須 小於或等於 一個指定的 value, 那我可以使用哪一個 validation rule?

max:value


# mimetypes:text/plain,…

Laravel 中, 如果我要驗一個 input, 其 value 的 minetypes 必須符合指定值, 那我可以使用哪一個 validation rule?
<?php
'video' => 'mimetypes:video/avi,video/mpeg,video/quicktime'
Laravel 中, 當我使用 validation rule minetypes 時, 框架會真正去讀這個檔案嗎?

會哦

Laravel 中, 當我使用 validation rule minetypes 時, 有可能框架驗到的跟 client 提供的 minetypes 不同嗎? 為什麼?
  • 會哦
  • 因為框架會自己去讀檔案, 不會以 client 提供的為依據
Laravel 中, validation rule minetypes, 是會比對實際上框架讀的 minetypes, 還是讀到 minetypes 之後再去取得相對應得副檔名

實際上框架讀的 minetypes


# mines:foo,bar

Laravel 中, 如果我要驗一個 input, 其 value 必須要是我指定的 minetype 相對應的副檔名, 那我可以使用哪一個 validation rule?

mines:foo,bar,…

Laravel 中的 validation rule mines 會去呼叫哪一個 method?

guessExtension

Laravel 中的 validation rule mines 會去呼叫 guessExtension, 然後 guessExtension 會去呼叫哪一個 method?

getMineType

Laravel 中的 validation rule mines 會去讀檔案內容以判斷其 minetypes 嗎?

會的

哪裡可以找到 minetype 以及其相對應的 extension?

文件


# min:value

Laravel 中, 如果我要驗證一個 input, 其 value 必須大於或等於我所指定的一個值, 那我可以使用哪一個 validation rule?

min:value


# not_in:foo,bar,…

Laravel 中, 如果我要驗一個 input, 其 value 不可被包含在我所提供的一個 list 當中, 即該 list 可以是一個 array, 那我可以使用哪一個 validation rule?

not_in:foo,bar,…

Laravel 中, 如果我要使用 Rule 來定義 not_in, 那我可以怎麼做?
<?php
use Illuminate\Validation\Rule;

Validator::make($data, [
'toppings' => [
'required',
Rule::notIn(['sprinkles', 'cherries']),
],
]);


# not_regex:pattern

Laravel 中, 如果我要驗一個 input, 其 value 不可符合我所定義的 regex pattern, 那我可以使用哪一個 validation rule?

not_regex:pattern

Laravel 中, 當我使用 not_regexregex 預設 validation rule 時, 該使用 array 形式, 還是 pipe 形式?

array, 如下 example:

  • Example:
    <?php
    $validatedData = $request->validate([
    'password' => ['required', 'regex:^(?=.*[a-z]|.*[A-Z])(?=.*[\d])(?=.*[\W])[\w@$%\^&]{8,16}$'],
    ]);
Larevel 的 validation rule regex 以及 not_regex, 其格式須符合 PHP 的哪一個 function?

preg_match


# numeric

Laravel 中, 如果我要驗一個 input, 其 value 需為 numeric, 那我可以使用哪一個 validation rule?

numeric

Laravel validation rule 中的 numeric 跟 integer 差別在哪?

numeric 可以有小數點, integer 為整數


# password

Laravel 中, 如果我要驗一個 input, 其 value 必須可以通過登入者的 password 驗證, 那我可以使用哪一個 validation rule?

password

Laravel 的 validation rule password 可否指定 guard? 怎麼做?
  • 'password' => 'password:api'


# present

Laravel 中, 如果說我要驗一個欄位必須要出現在 request 的 input list 裡, 至於有沒有 value 的話不管, 那我可以使用哪一個 validation rule?

present


# required

Laravel 中, 如果我要驗一個 input, 該欄位必須要出現在 input data 之中, 且欄位的值不可為 null, 那我可以使用哪一個 validation rule?

required

Laravel validation rule required 中, 欄位在哪四種情況下會被視為 “empty”?
  • The value is null.
  • The value is an empty string.
  • The value is an empty array or empty Countable object.
  • The value is an uploaded file with no path.
Laravel 中, required 的驗證條件是?
  • input data 中必須要有該欄位
  • 該欄位不可為 null
Laravel 中, present 的驗證條件是?
  • input data 中必須要有該欄位就可, 欄位是否為空不驗
Laravel 中, filled 的驗證條件是?
  • input data 中如果有出現的欄位, 其欄位不可為 empty, 如果沒出現則不管


# required_if:anotherfield,value,…

Laravel 中, 如果我要驗一個 input, 情境需求如下, 我可以使用哪一個 validation rule?
  • 需求:
    • 如果該 input 的值與我指定的一個欄位的 value 一樣, 那我才使用以下規則
    • 該 input 必須出現在 request 的 input list 中
    • 該 input 的 value 不可為 empty
  • Answer:
    required_if:anotherfield,value,…
Laravel 中, 如果我使用 Rule class 來定義 required_if, 那 requiredIf method 接受什麼樣的 arguments?
  • boolean
  • closure
Laravel 中, 如果我使用 Rule class 來定義 required_if, 並且帶入 closure, 那 closure 的輸出必須要是什麼型別?

boolean

Laravel, 如果我要使用 Rule class 來自定義 required_if, 假如條件是 $request->user()->is_admin, 帶入 boolean, 那我可以怎麼實作?
<?php
use Illuminate\Validation\Rule;

Validator::make($request->all(), [
'role_id' => Rule::requiredIf($request->user()->is_admin),
]);
Laravel, 如果我要使用 Rule class 來自定義 required_if, 假如條件是 $request->user()->is_admin, 帶入 closure, 那我可以怎麼實作?
<?php
use Illuminate\Validation\Rule;

Validator::make($request->all(), [
'role_id' => Rule::requiredIf(function () use ($request) {
return $request->user()->is_admin;
}),
]);


# required_unless:anotherfield,value,…

Laravel 中, 如果我要驗一個 input, 情境需求如下, 我可以使用哪一個 validation rule?
  • 需求:
    • 默認使用以下規則驗證, 除非該 input 的值與我指定的一個欄位的 value 一樣
    • 該 input 必須出現在 request 的 input list 中
    • 該 input 的 value 不可為 empty
  • Answer:
    required_unless:anotherfield,value,..


# required_with:foo,bar,…

Laravel 當中, 如果我要驗一個 input, 規則如下, 那我可以使用哪一個 validation rule?
  • 案例規則:
    • 當某個指定的 field 出現在 input data 中時, 啟用以下規則
    • 該 field 必須存在於 input data
    • 該 field 的 value 不可為 empty
  • Answer:
    required_with:foo,bar,…


# required_with_all:foo,bar,…

Laravel 當中, 如果我要驗一個 input, 規則如下, 那我可以使用哪一個 validation rule?
  • 案例規則:
    • 當指定的 fields 全部都有出現在 input data 中時, 啟用以下規則
    • 該 field 必須存在於 input data
    • 該 field 的 value 不可為 empty
  • Answer:
    required_with_all:foo,bar,…


# required_without:foo,bar,…

Laravel 當中, 如果我要驗一個 input, 規則如下, 那我可以使用哪一個 validation rule?
  • 案例規則:
    • 當某個指定的 field 沒出現在 input data 中時, 啟用以下規則
    • 該 field 必須存在於 input data
    • 該 field 的 value 不可為 empty
  • Answer:
    required_without:foo,bar,…


# required_without_all:foo,bar,…

Laravel 當中, 如果我要驗一個 input, 規則如下, 那我可以使用哪一個 validation rule?
  • 案例規則:
    • 當指定的 fields 全部都沒有出現在 input data 中時, 啟用以下規則
    • 該 field 必須存在於 input data
    • 該 field 的 value 不可為 empty
  • Answer:
    required_without_all:foo,bar,…


# same:field

Laravel 當中, 如果我要驗一個 field, 其 value 必須跟我指定的另外一個 field 的 value 是一樣的, 那我可以使用哪一個 validation rule?

same:field


# size:value

Laravel 當中, 如果我要驗一個 field, 其 value 的 size 必須要跟我指定的相同, 那我可以使用哪一個 validation rule?

size:value

Laravel validation rule size:value 中, 如果 input 是 string, 那 value 會是?

string 的字元數目

Laravel validation rule size:value 中, 如果 input 是 integer, 那 value 會是?

integer 的值

Laravel validation rule size:value 中, 如果 input 是 array, 那 value 會是?

array 的 count

Laravel validation rule size:value 中, 如果 input 是 files, 那 value 會是?

files 的大小

Laravel validation rule size:value 中, 如果 input 是 files, 那 value 會是 files 大小, 以什麼為單位?

kilobytes

# starts_with:foo,bar,…

Laravel 中, 如果我要驗一個 field, 其 value 必須要是指定的 value 開頭, 那我可以使用哪一個 validation rule?

starts_with:foo,bar,…


# string

Laravel 當中, 如果我要驗一個 field, 其 value 必須是不可為 null 的 string, 那我可以使用哪一個 validation rule?

string


# timezone

Laravel 當中, 如果我要驗一個 input, 其 value 必須是一個可被 PHP function timezone_identifiers_list 驗證合法的 timezone, 那我可以使用哪一個 validation rule?

timezone


# unique:table,column,except,idColumn

Laravel 中, 如果我要驗一個 input, 其 value 必須在一個指定的 table 以及 column 中是獨一無二的, 那我可以使用哪一個 validation rule?

unique:table,column,except,idColumn

Specifying A Custom Table / Column Name:
Laravel validation rule unique 中, 除了指定 table 之外, 我可否指定 model?

Laravel validation rule unique 中, 什麼樣的條件之下我可以不需指定 column ?

當我 input 的 field name 跟 column name 一樣時

Custom Database Connection
Laravel validation rule unique 中, 如果我要指定 database, 那我可以怎麼做? 例如, 我要指定 carSharing database 中的 users table, column 為 email_address
<?php
'email' => 'unique:connection.users,email_address'
Forcing A Unique Rule To Ignore A Given ID:
Laravel validation rule unique 中, 如果說我要驗這個 input 為 unique, 但我要忽略一個指定的 row, 那我可以如何使用 Rule class 來實作?
<?php
use Illuminate\Validation\Rule;

Validator::make($data, [
'email' => [
'required',
Rule::unique('users')->ignore($user->id),
],
]);
當使用 Rule class 來實作 Laravel validation rule unique 時, 帶入 ignore method 的值可以從 request 獲得嗎? 為什麼?
  • 不可
  • 為防止 SQL injection
以下的 Laravel validation unique 透過 Rule class 的實作範例, 在 ignore method 中除了帶入 $user->id 之外, 我還可以帶入什麼?
  • 範例:

    <?php
    use Illuminate\Validation\Rule;

    Validator::make($data, [
    'email' => [
    'required',
    Rule::unique('users')->ignore($user->id),
    ],
    ]);
  • Answer:
    $user

以下的 Laravel validation unique 透過 Rule class 的實作範例, 如果說我的 primary column 的名稱不叫做 id, 而是叫做 user_id, 那我要怎麼修改?
  • 範例:

    <?php
    use Illuminate\Validation\Rule;

    Validator::make($data, [
    'email' => [
    'required',
    Rule::unique('users')->ignore($user->id),
    ],
    ]);
  • Answer:

    <?php
    use Illuminate\Validation\Rule;

    Validator::make($data, [
    'email' => [
    'required',
    Rule::unique('users')->ignore($user->id, 'user_id'),
    ],
    ]);
以下的 Laravel validation unique 透過 Rule class 的實作範例, 如果說我的 column 不叫 email, 而是叫做 email_address, 那我可以怎麼修改?
  • 範例:

    <?php
    use Illuminate\Validation\Rule;

    Validator::make($data, [
    'email' => [
    'required',
    Rule::unique('users')->ignore($user->id),
    ],
    ]);
  • Answer:

    <?php
    use Illuminate\Validation\Rule;

    Validator::make($data, [
    'email' => [
    'required',
    Rule::unique('users', 'email_address')->ignore($user->id, 'user_id'),
    ],
    ]);
Adding Additional Where Clauses
當使用 Laravel validation rule unique 時, 如果我要加入額外的 query constraints, 我可以怎麼做? 假如說, users table 中 account_id 為 1 的都是指定範圍
<?php
'email' => Rule::unique('users')->where(function ($query) {
return $query->where('account_id', 1);
})


# url

Laravel 中, 如果我要驗一個 input, 其 value 必須要是一個 url, 那我可以使用哪一個 validation rule?

url


# uuid

Laravel 中, 如果我要驗一個 input, 其 value 必須要是一個 uuid, 那我可以使用哪一個 validation rule?

uuid




# Conditionally Adding Rules

# Validating When Present

Laravel 中, 如果我要驗一個 input, 如果該 input 有出現在 request 的 input array 中的話我才驗, 若是不存在我就不驗, 那我可以使用哪一個 validation rule?

sometimes

以下的 validation rule 中, 如果 email 有出現在 request 的 input array 當中時我就驗, 如果沒出現的話那我就略過這個驗證, 我可以怎樣修改這個 validation rule?
  • 範例:

    <?php
    $v = Validator::make($data, [
    'email' => 'required|email',
    ]);
  • Answer:

    <?php
    $v = Validator::make($data, [
    'email' => 'sometimes|required|email',
    ]);


# Complex Conditional Validation

Laravel 中, 如果說我要有條件式的對指定的欄位附加規則驗證, 當條件滿足為 true 我才驗, 當條件不滿足為 false 我就不驗, 那我可以使用 哪一個 instance 的 哪一個 method?
  • validator
  • sometimes
以下的 Laravel 範例中, 如果說, 當 games 的 value 大於 100 的話就驗 reason 欄位, 驗的規則為 required|max:500, 那我可以怎麼做?
  • 範例:

    <?php
    $v = Validator::make($data, [
    'email' => 'required|email',
    'games' => 'required|numeric',
    ]);
  • Answer:

    <?php
    $v->sometimes('reason', 'required|max:500', function ($input) {
    return $input->games >= 100;
    });
請解釋以下的 Laravel 程式碼的語意?
  • 程式碼

    <?php
    $v->sometimes('reason', 'required|max:500', function ($input) {
    return $input->games >= 100;
    });
  • Answer:
    如果 closure 的 return 值為 true, 就驗 reason 這個 input, rule 為 required|max:500

以下的 Laravel 程式碼中, 如果我要在符合條件後, 一次驗多個 input, 舉例來說, input 為 reasoncost, 那我可以怎麼修改?
  • 程式碼

    <?php
    $v->sometimes('reason', 'required|max:500', function ($input) {
    return $input->games >= 100;
    });
  • Answer:

    <?php
    $v->sometimes(['reason', 'cost'], 'required|max:500', function ($input) {
    return $input->games >= 100;
    });
以下的 Laravel 程式碼中, $input 是哪一個 class 的 instance?
  • 程式碼

    <?php
    $v->sometimes('reason', 'required|max:500', function ($input) {
    return $input->games >= 100;
    });
  • Answer:
    Illuminate\Support\Fluent




# Validating Arrays

Laravel validation 當中, 如果說 photos 是一個 array, 我要驗證該 photos 裡 key 為 profile 的 value, 該 value, 規則為 required|image, 那我可以怎麼做?
<?php
$validator = Validator::make($request->all(), [
'photos.profile' => 'required|image',
]);
Laravel 中, 如果說我 person 是一個 array, 下面有複數的 index, 每個 index 裡都有 email, first_name 等等… 資訊, 如果說我要針對每個 index 下面的 email 去做驗證, 那我可以怎麼做?
<?php
$validator = Validator::make($request->all(), [
'person.*.email' => 'email|unique:users',
'person.*.first_name' => 'required_with:person.*.last_name',
]);




# Custom Validation Rules

Laravel 中, 如果我要客製 validation rule 的話, 有哪幾種方式?
  • rule object
  • closure
  • extensions

# Using Rule Objects

Laravel 中, 如果我要使用 CLI 建立一個 rule, 指令該怎麼下?
php artisan make:rule RuleName
Laravel validation 中, 當我在定義 rule object 時, 可使用哪兩個主要 method?
  • passes
  • message
Laravel validation 中, 當我使用 rule object 時, passes method 的 return 值是什麼?

boolean

Laravel validation 中, 當我使用 rule object 時, message method 的 return 值是什麼?

error message

以下的 Laravel rule object 範例中, 如果我要將規則定義成, attribute 的 value 必須是 1, 那我可以怎麼修改?
  • Example:

    <?php

    namespace App\Rules;

    class Uppercase implements Rule
    {
    public function passes($attribute, $value)
    {
    return strtoupper($value) === $value;
    }

    public function message()
    {
    return 'The :attribute must be uppercase.';
    }
    }
  • Answer:

    <?php

    namespace App\Rules;

    use Illuminate\Contracts\Validation\Rule;

    class Uppercase implements Rule
    {

    public function passes($attribute, $value)
    {
    return $value === 1;
    }

    public function message()
    {
    return 'The :attribute must be uppercase.';
    }
    }
以下的 Laravel example code 的意思是?
  • Example:

    <?php
    public function message()
    {
    return trans('validation.uppercase');
    }
  • Answer:
    客製 error message, 從自定義的 translation file 中取得 error message

Laravel validation 中, 如果我已經自定義好 rule object 了, 在以下的範例中, 我該怎麼使用它? 假設定義好的 rule 叫做 Uppercase
  • Example:

    <?php
    use App\Rules\Uppercase;

    $request->validate([
    'name' => ['required', 'string'],
    ]);
  • Answer:

    <?php
    use App\Rules\Uppercase;

    $request->validate([
    'name' => ['required', 'string', new Uppercase],
    ]);


# Using Closures

以下的 Laravel example code 的意思是?
  • Example:

    <?php
    $validator = Validator::make($request->all(), [
    'title' => [
    'required',
    'max:255',
    function ($attribute, $value, $fail) {
    if ($value === 'foo') {
    $fail($attribute.' is invalid.');
    }
    },
    ],
    ]);
  • Answer:
    定義一個 closure based validation rule
    $attribute 等於 input name, 即 ‘title’
    $value 等於 input value
    $fail 裡頭是 error message


# Using Extensions

Laravel 中, 請解釋以下的 extension example
  • Example:

    <?php

    namespace App\Providers;

    use Illuminate\Support\ServiceProvider;
    use Illuminate\Support\Facades\Validator;

    class AppServiceProvider extends ServiceProvider
    {
    public function register()
    {
    //
    }

    public function boot()
    {
    Validator::extend('foo', function ($attribute, $value, $parameters, $validator) {
    return $value == 'foo';
    }, 'The value must be foo');
    }
    }
  • Answer:
    在 AppServiceProvider 的 boot method 中, 使用 validator class 的 extend method 來定義新的 validation rule
    # 1. 新的 validation rule 名稱為 foo
    # 2. $attribute 為 input 名稱
    # 3. $value 為 input value
    # 4. $parameters 為一個 array, 可帶入 rule 的參數
    # 5. $validator 為 Validator instance
    # 6. extend() 的第三個 argument 可自訂 error message

以下的 Laravel example code 的意思是?
  • Example:

    <?php
    Validator::extend('foo', 'FooValidator@validate');
  • Answer:
    當使用 validator class 的 extend method 自定義新的 validation rule 時, 也可指定 controller 來取代 closure


# Defining The Error Message

Laravel 中, 當我使用 extension 來自定義 validation rule 時, 我可以經 Error Message 定義在 language validation file 的哪一層中?

第一層

Laravel 中, 當我使用 extension 來自定義 validation rule 時, 我可以經 Error Message 定義在 language validation file 的第一層, 為什麼不是定義在 custom 層下?

因為這是一個新的 rule 的 message, 不是 attribute-specific message

Laravel 中, 當我使用 extension 來自定義 validation rule 時, 我們可能會需要設定一些佔位符, 例如 :attribute, :value, :other 這些, 那我可以使用哪一個 class 的哪一個 method 來定義這些佔位符呢?
  • Validator
  • replacer
Laravel 中, 當我使用 extension 來自定義 validation rule 時, 我可以在哪個地方使用 Validator::replacer 來自定義佔位符?

AppServiceProvider 的 boot method

以下的 Laravel example code 的意思是?
  • Example:

    <?php
    public function boot()
    {
    Validator::extend(...);

    Validator::replacer('foo', function ($message, $attribute, $rule, $parameters) {
    return str_replace(array(':value', ':other'), $parameters, $message);
    });
    }
  • Answer:
    針對 validation extend rule ‘foo’ 做佔位符帶入, 比方說, $message = ‘The :value must be greater than :other’, 而 $parameter 便可以是一個 array([‘price’, ‘cost’]), 因此錯誤訊息會是 ‘The price must be greater than cost’


# Implicit Extensions

以下的 Laravel validation example 的結果會是 true 還是 false? Why?
  • Example:

    <?php
    $rules = ['name' => 'unique:users,name'];

    $input = ['name' => ''];

    Validator::make($input, $rules)->passes();
  • Answer:

    • true
    • 因為 rule 對於沒有 present 的 attribute, 或值為 empty string 的 attribute 不會生效
當使用 Laravel validation extension rule 時, 如果驗證對象 attribute 沒有出現在 input array list 當中的話, Laravel 預設不會執行這個 rule, 那如果我要強制執行該 rule, 除了加入 required rule 之外, 還可以怎麼做?

使用 Validator::extendImplicit() method

當使用 Laravel validation rule object 時, 如果驗證對象 attribute 沒有出現在 input array list 當中的話, Laravel 預設不會執行這個 rule, 那如果我要強制執行該 rule, 除了加入 required rule 之外, 還可以怎麼做?

在該 rule object 中 implement Illuminate\Contracts\Validation\ImplicitRule

<未完成> 命令行的藝術 Laravel - The Basics - Middleware (官方文件原子化翻譯)

留言

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×