簡體   English   中英

如何在默認的Validator :: make($ data…在laravel中注冊?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM