[英]How to add custom validaton rule to default Validator::make($data… register in laravel?
我已經在文檔中閱讀了如何創建新的自定義驗證規則 。
我在示例中做了一個類似的例子,但只允許小寫。 該類被創造性地命名為Lowercase 。
現在,我要將其添加到從make:auth生成的RegisterController的Validator-list中。 這是我要添加到的列表:
return Validator::make($data, [
'name' => 'required|string|max:255|**ADD MY VALIDATOR HERE**',
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:6|confirmed',
]);
顯然這里缺少我的東西...在文檔中說要使用我已經做過的事情:
$request->validate([
'name' => ['required', 'string', new Lowercase],
]);
為了將我的自定義規則添加到上面的列表中,我需要做什么?
編輯1:
根據請求,我將顯示我創建的規則。 它與文檔中鏈接示例中的IDENTICALL相同 ,但我已將其名稱從大寫切換為小寫,並將strtoupper切換為strtolower
public function passes($attribute, $value)
{
return strtolower($value) === $value;
}
您有幾種選擇。 一種是使用工匠制定規則
php artisan make:rule Lowercase
您最終會得到app \\ rules \\ Lowercase.php,它看起來像這樣
<?php
namespace App\Rules;
use Auth;
use Illuminate\Contracts\Validation\Rule;
class Lowercase implements Rule
{
/**
* Create a new rule instance.
*
* @return void
*/
public function __construct()
{
}
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function passes($attribute, $value)
{
return strtolower($value) === $value;
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return 'Must be lowercase!';
}
}
“一旦定義了規則,您可以通過將規則對象的實例與其他驗證規則一起傳遞,將其附加到驗證器:”
所以在您的RegisterController中
use App\Rules\Lowercase;
return Validator::make($data, [
'name' => ['required', 'string', 'max:255', new Lowercase],
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:6|confirmed',
]);
第二種選擇是使用閉包,而不用與工匠一起制定自定義規則。 如果您真的不需要在其他地方使用該規則,則此方法效果很好。
因此,在您的RegisterController中,您可以執行以下操作:
return Validator::make($data, [
'name' => [
'required',
'max:255',
function ($attribute, $value, $fail) {
if (strtolower($value) != $value) {
$fail($attribute.' must be all lowercase.');
}
},
],
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:6|confirmed',
]);
$request->validate([
'name' => ['required','string', 'max:255', 'new MyNewRuleClass(or Uppercase)'],
'email' => ['required', 'string','email','max:255','unique:users'],
'password' => ['required','string','min:6','confirmed'],
]);
希望這對您有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.