CodeIgniter4 驗(yàn)證方式

2020-08-17 17:17 更新

CodeIgniter提供了一個(gè)全面的數(shù)據(jù)驗(yàn)證類,該類有助于最大程度地減少您要編寫的代碼量。

總覽

在解釋CodeIgniter的數(shù)據(jù)驗(yàn)證方法之前,讓我們描述理想的情況:

  1. 顯示一個(gè)表格。
  2. 您填寫并提交。
  3. 如果您提交的內(nèi)容無效,或者可能缺少必填項(xiàng),則會(huì)重新顯示包含您的數(shù)據(jù)以及描述問題的錯(cuò)誤消息的表格。
  4. 此過程將一直持續(xù)到您提交有效的表單為止。

在接收端,腳本必須:

  1. 檢查所需數(shù)據(jù)。
  2. 驗(yàn)證數(shù)據(jù)的類型正確,并且符合正確的條件。例如,如果提交了用戶名,則必須對(duì)其進(jìn)行驗(yàn)證以僅包含允許的字符。它必須是最小長度,并且不能超過最大長度。用戶名不能是別人的現(xiàn)有用戶名,甚至不能是保留字。等等。
  3. 清理數(shù)據(jù)以確保安全。
  4. 如有必要,對(duì)數(shù)據(jù)進(jìn)行預(yù)格式化(是否需要修剪數(shù)據(jù)?HTML編碼?等等)。
  5. 準(zhǔn)備要插入數(shù)據(jù)庫的數(shù)據(jù)。

盡管上述過程沒有什么非常復(fù)雜的,但通常需要大量代碼,并且為了顯示錯(cuò)誤消息,通常將各種控制結(jié)構(gòu)放置在HTML形式內(nèi)。表單驗(yàn)證雖然易于創(chuàng)建,但實(shí)現(xiàn)起來通常非常麻煩且乏味。

表單驗(yàn)證教程

接下來是實(shí)現(xiàn)CodeIgniter的表單驗(yàn)證的“動(dòng)手”教程。

為了實(shí)現(xiàn)表單驗(yàn)證,您需要三件事:

  1. 一個(gè)視圖包含表單文件。
  2. 成功提交后將顯示包含“成功”消息的View文件。
  3. 一種控制器方法,用于接收和處理提交的數(shù)據(jù)。

讓我們以成員注冊(cè)表單為例創(chuàng)建這三件事。

表格

使用文本編輯器創(chuàng)建一個(gè)名為Signup.php的表單。在其中放置以下代碼,并將其保存到您的app / Views /文件夾中:

<html>
<head>
    <title>My Form</title>
</head>
<body>


    <?= $validation->listErrors() ?>


    <?= form_open('form') ?>


    <h5>Username</h5>
    <input type="text" name="username" value="" size="50" />


    <h5>Password</h5>
    <input type="text" name="password" value="" size="50" />


    <h5>Password Confirm</h5>
    <input type="text" name="passconf" value="" size="50" />


    <h5>Email Address</h5>
    <input type="text" name="email" value="" size="50" />


    <div><input type="submit" value="Submit" /></div>


    </form>


</body>
</html>

成功頁面

使用文本編輯器創(chuàng)建一個(gè)名為Success.php的表單。在其中放置以下代碼,并將其保存到您的app / Views /文件夾中:

<html>
<head>
    <title>My Form</title>
</head>
<body>


    <h3>Your form was successfully submitted!</h3>


    <p><?= anchor('form', 'Try it again!') ?></p>


</body>
</html>

控制器

使用文本編輯器創(chuàng)建一個(gè)名為Form.php的控制器。在其中放置以下代碼,并將其保存到您的app / Controllers /文件夾中:

<?php namespace App\Controllers;


use CodeIgniter\Controller;


class Form extends Controller
{
    public function index()
    {
        helper(['form', 'url']);


        if (! $this->validate([]))
        {
            echo view('Signup', [
                'validation' => $this->validator
            ]);
        }
        else
        {
            echo view('Success');
        }
    }
}

試試吧!

要嘗試使用表單,請(qǐng)使用類似于以下網(wǎng)址的網(wǎng)址訪問您的網(wǎng)站:

example.com/index.php/form/

如果您提交表單,則只需重新加載表單即可。這是因?yàn)槟形丛O(shè)置任何驗(yàn)證規(guī)則。

注解

由于您尚未告訴Validation類驗(yàn)證任何內(nèi)容,因此默認(rèn)情況下返回false(布爾false)。該 方法僅在成功應(yīng)用規(guī)則而沒有失敗的情況下才返回true。validate()

說明

您會(huì)注意到上述頁面的幾件事:

表單(Signup.php)是一個(gè)標(biāo)準(zhǔn)的Web表單,但有一些例外:

  1. 它使用表單助手來創(chuàng)建表單開口。從技術(shù)上講,這不是必需的。您可以使用標(biāo)準(zhǔn)HTML創(chuàng)建表單。但是,使用幫助程序的好處是,它基于您的配置文件中的URL為您生成操作URL。這可以使您的應(yīng)用程序在URL更改的情況下具有更高的可移植性。

  1. 在表單頂部,您會(huì)注意到以下函數(shù)調(diào)用:

   <?= $validation->listErrors() ?>

此函數(shù)將返回驗(yàn)證器發(fā)送回的所有錯(cuò)誤消息。如果沒有消息,則返回一個(gè)空字符串。

控制器(Form.php)具有一種方法:index()。此方法使用Controller提供的validate方法,并加載視圖文件使用的表單幫助器和URL幫助器。它還運(yùn)行驗(yàn)證例程。根據(jù)驗(yàn)證是否成功,它會(huì)顯示表單或成功頁面。

加載Library

該庫作為名為validation的服務(wù)加載:

$validation =  \Config\Services::validation();

這將自動(dòng)加載Config\Validation文件,該文件包含用于包含多個(gè)規(guī)則集的設(shè)置以及可以輕松重用的規(guī)則集合。

注解

您可能永遠(yuǎn)不需要使用此方法,因?yàn)?a href="http://o2fo.com/codeigniter4/codeigniter4-u82x39kc.html">Controller和Model都提供了使驗(yàn)證變得更加容易的方法。

設(shè)置驗(yàn)證規(guī)則

使用CodeIgniter,您可以為給定字段設(shè)置所需數(shù)量的驗(yàn)證規(guī)則,并按順序?qū)盈B它們。要設(shè)置驗(yàn)證規(guī)則,你將使用setRule(),setRules()withRequest() 方法。

setRule()

此方法設(shè)置單個(gè)規(guī)則。它以字段名稱為第一個(gè)參數(shù),使用可選標(biāo)簽和帶有以豎線分隔的規(guī)則列表的字符串,應(yīng)將其應(yīng)用:

$validation->setRule('username', 'Username', 'required');

字段名必須與在發(fā)送的任何數(shù)據(jù)陣列的密鑰相匹配,如果數(shù)據(jù)是從$ _POST直接采取,那么它必須是形式輸入名稱的精確匹配。

setRules()

類似于,setRule()但接受字段名稱及其規(guī)則的數(shù)組:

$validation->setRules([
    'username' => 'required',
    'password' => 'required|min_length[10]'
]);

要給出帶標(biāo)簽的錯(cuò)誤消息,您可以設(shè)置為:

$validation->setRules([
    'username' => ['label' => 'Username', 'rules' => 'required'],
    'password' => ['label' => 'Password', 'rules' => 'required|min_length[10]']
]);

withRequest()

在驗(yàn)證從HTTP請(qǐng)求輸入的數(shù)據(jù)時(shí),將使用驗(yàn)證庫是最常見的情況之一。如果需要,您可以傳遞當(dāng)前Request對(duì)象的實(shí)例,它將獲取所有輸入數(shù)據(jù)并將其設(shè)置為要驗(yàn)證的數(shù)據(jù):

$validation->withRequest($this->request)
           ->run();

驗(yàn)證工作

驗(yàn)證數(shù)組鍵

如果您的數(shù)據(jù)在嵌套的關(guān)聯(lián)數(shù)組中,則可以使用“點(diǎn)數(shù)組語法”輕松驗(yàn)證數(shù)據(jù):

// The data to test:
'contacts' => [
    'name' => 'Joe Smith',
    'friends' => [
        [
            'name' => 'Fred Flinstone'
        ],
        [
            'name' => 'Wilma'
        ]
    ]
]


// Joe Smith
$validation->setRules([
    'contacts.name' => 'required'
]);


// Fred Flintsone & Wilma
$validation->setRules([
    'contacts.friends.name' => 'required'
]);

您可以使用'*'通配符來匹配數(shù)組的任意一級(jí):

// Fred Flintsone & Wilma
$validation->setRules([
    'contacts.*.name' => 'required'
]);

當(dāng)您具有一維數(shù)組數(shù)據(jù)時(shí),“點(diǎn)數(shù)組語法”也很有用。例如,多選下拉列表返回的數(shù)據(jù):

// The data to test:
'user_ids' => [
    1,
    2,
    3
]
// Rule
$validation->setRules([
    'user_ids.*' => 'required'
]);

驗(yàn)證一個(gè)值

根據(jù)規(guī)則驗(yàn)證一個(gè)值:

$validation->check($value, 'required');

將驗(yàn)證規(guī)則集保存到配置文件

Validation類的一個(gè)不錯(cuò)的功能是,它允許您將整個(gè)應(yīng)用程序的所有驗(yàn)證規(guī)則存儲(chǔ)在配置文件中。您將規(guī)則組織為“組”。您可以在每次運(yùn)行驗(yàn)證時(shí)指定一個(gè)不同的組。

如何保存規(guī)則

要存儲(chǔ)您的驗(yàn)證規(guī)則,只需在Config\Validation 類中使用您的組的名稱創(chuàng)建一個(gè)新的公共屬性。該元素將包含一個(gè)包含驗(yàn)證規(guī)則的數(shù)組。如前所示,驗(yàn)證數(shù)組將具有以下原型:

class Validation
{
    public $signup = [
        'username'     => 'required',
        'password'     => 'required',
        'pass_confirm' => 'required|matches[password]',
        'email'        => 'required|valid_email'
    ];
}

您可以在調(diào)用run()方法時(shí)指定要使用的組:

$validation->run($data, 'signup');

您還可以通過將屬性命名為與組相同的名稱,并附加,在此配置文件中存儲(chǔ)自定義錯(cuò)誤消息_errors。使用該組時(shí),這些將自動(dòng)用于任何錯(cuò)誤:

class Validation
{
    public $signup = [
        'username'     => 'required',
        'password'     => 'required',
        'pass_confirm' => 'required|matches[password]',
        'email'        => 'required|valid_email'
    ];


    public $signup_errors = [
        'username' => [
            'required'    => 'You must choose a username.',
        ],
        'email'    => [
            'valid_email' => 'Please check the Email field. It does not appear to be valid.'
        ]
    ];
}

或在數(shù)組中傳遞所有設(shè)置:

class Validation
{
    public $signup = [
        'username' => [
            'rules'  => 'required',
            'errors' => [
                'required' => 'You must choose a Username.'
            ]
        ],
        'email'    => [
            'rules'  => 'required|valid_email',
            'errors' => [
                'valid_email' => 'Please check the Email field. It does not appear to be valid.'
            ]
        ],
    ];
}

有關(guān)數(shù)組格式的詳細(xì)信息,請(qǐng)參見下文。

獲取和設(shè)置規(guī)則組

獲取規(guī)則組

此方法從驗(yàn)證配置中獲取一個(gè)規(guī)則組:

$validation->getRuleGroup('signup');

設(shè)定規(guī)則組

此方法將規(guī)則組從驗(yàn)證配置設(shè)置為驗(yàn)證服務(wù):

$validation->setRuleGroup('signup');

運(yùn)行多個(gè)驗(yàn)證

注解

run()方法不會(huì)重置錯(cuò)誤狀態(tài)。如果先前的運(yùn)行失敗, run()它將始終返回false getErrors()并將返回所有先前的錯(cuò)誤,直到明確重置為止。

如果您打算運(yùn)行多個(gè)驗(yàn)證(例如,對(duì)不同的數(shù)據(jù)集或使用彼此不同的規(guī)則進(jìn)行驗(yàn)證),則可能需要$validation->reset()在每次運(yùn)行之前調(diào)用,以消除上一次運(yùn)行中的錯(cuò)誤。請(qǐng)注意,reset()這會(huì)使您先前設(shè)置的任何數(shù)據(jù),規(guī)則或自定義錯(cuò)誤失效,因此setRules(),setRuleGroup()等需要重復(fù):

for ($userAccounts as $user) {
    $validation->reset();
    $validation->setRules($userAccountRules);
    if (!$validation->run($user)) {
        // handle validation errors
    }
}

驗(yàn)證占位符

Validation類提供了一種簡單的方法,可以根據(jù)傳遞給規(guī)則的數(shù)據(jù)替換規(guī)則的某些部分。這聽起來很晦澀,但是對(duì)于is_unique驗(yàn)證規(guī)則來說尤其方便。占位符只是作為$ data傳入的字段(或數(shù)組鍵)的名稱,并用大括號(hào)括起來。它將替換為匹配的傳入字段的。一個(gè)例子應(yīng)該澄清這一點(diǎn):

$validation->setRules([
    'email' => 'required|valid_email|is_unique[users.email,id,{id}]'
]);

在這套規(guī)則中,它聲明電子郵件地址在數(shù)據(jù)庫中應(yīng)該是唯一的,除了ID與占位符值匹配的行之外。假設(shè)表單POST數(shù)據(jù)具有以下內(nèi)容:

$_POST = [
    'id' => 4,
    'email' => 'foo@example.com'
];

然后將{id}占位符替換為數(shù)字4,從而給出此修改后的規(guī)則:

$validation->setRules([
    'email' => 'required|valid_email|is_unique[users.email,id,4]'
]);

因此,它將在id=4驗(yàn)證電子郵件唯一時(shí)忽略數(shù)據(jù)庫中具有該行的行。

只要您確保傳入的任何動(dòng)態(tài)鍵都不會(huì)與表單數(shù)據(jù)沖突,這也可以用于在運(yùn)行時(shí)創(chuàng)建更多動(dòng)態(tài)規(guī)則。

處理錯(cuò)誤

驗(yàn)證庫提供了幾種方法來幫助您設(shè)置錯(cuò)誤消息,提供自定義錯(cuò)誤消息以及檢索要顯示的一個(gè)或多個(gè)錯(cuò)誤。

默認(rèn)情況下,錯(cuò)誤消息是從中的語言字符串派生的system/Language/en/Validation.php,其中每個(gè)規(guī)則都有一個(gè)條目。

設(shè)置自定義錯(cuò)誤消息

兩個(gè)setRule()setRules()方法可以接受將被用作錯(cuò)誤特定于每個(gè)場作為其最后一個(gè)參數(shù)自定義消息的陣列。因?yàn)殄e(cuò)誤是針對(duì)每個(gè)實(shí)例量身定制的,所以這為用戶提供了非常愉快的體驗(yàn)。如果未提供自定義錯(cuò)誤消息,則將使用默認(rèn)值。

這是提供自定義錯(cuò)誤消息的兩種方法。

作為最后一個(gè)參數(shù):

$validation->setRules([
        'username' => 'required|is_unique[users.username]',
        'password' => 'required|min_length[10]'
    ],
    [   // Errors
        'username' => [
            'required' => 'All accounts must have usernames provided',
        ],
        'password' => [
            'min_length' => 'Your password is too short. You want to get hacked?'
        ]
    ]
);

或作為標(biāo)簽樣式:

$validation->setRules([
        'username' => [
            'label'  => 'Username',
            'rules'  => 'required|is_unique[users.username]',
            'errors' => [
                'required' => 'All accounts must have {field} provided'
            ]
        ],
        'password' => [
            'label'  => 'Password',
            'rules'  => 'required|min_length[10]',
            'errors' => [
                'min_length' => 'Your {field} is too short. You want to get hacked?'
            ]
        ]
    ]
);

如果你想有一個(gè)字段的“人”的名稱,或可選參數(shù)的一些規(guī)則允許(如MAX_LENGTH),或者得到了驗(yàn)證,你可以添加值{field}{param}{value}標(biāo)記你的消息,分別為:

'min_length' => 'Supplied value ({value}) for {field} must have at least {param} characters.'

在人名“用戶名”和規(guī)則為min_length [6],值為“ Pizza”的字段上,將顯示錯(cuò)誤:“用戶名的提供值(Pizza)必須至少包含6個(gè)字符?!?/p>

注解

如果您傳遞了最后一個(gè)參數(shù),則帶標(biāo)簽的樣式錯(cuò)誤消息將被忽略。

消息和驗(yàn)證標(biāo)簽的翻譯

要使用語言文件中的翻譯字符串,我們可以簡單地使用點(diǎn)語法。假設(shè)我們有一個(gè)位于此處的翻譯文件:app/Languages/en/Rules.php。我們可以簡單地使用此文件中定義的語言行,如下所示:

$validation->setRules([
        'username' => [
            'label'  => 'Rules.username',
            'rules'  => 'required|is_unique[users.username]',
            'errors' => [
                'required' => 'Rules.username.required'
            ]
        ],
        'password' => [
            'label'  => 'Rules.password',
            'rules'  => 'required|min_length[10]',
            'errors' => [
                'min_length' => 'Rules.password.min_length'
            ]
        ]
    ]
);

得到所有錯(cuò)誤

如果需要檢索失敗字段的所有錯(cuò)誤消息,則可以使用以下getErrors()方法:

$errors = $validation->getErrors();


// Returns:
[
    'field1' => 'error message',
    'field2' => 'error message',
]

如果沒有錯(cuò)誤,將返回一個(gè)空數(shù)組。

得到一個(gè)錯(cuò)誤

您可以使用方法檢索單個(gè)字段的錯(cuò)誤getError()。唯一的參數(shù)是字段名稱:

$error = $validation->getError('username');

如果沒有錯(cuò)誤,將返回一個(gè)空字符串。

檢查是否存在錯(cuò)誤

您可以檢查該hasError()方法是否存在錯(cuò)誤。唯一的參數(shù)是字段名稱:

if ($validation->hasError('username'))
{
    echo $validation->getError('username');
}

自定義錯(cuò)誤顯示

當(dāng)您調(diào)用$validation->listErrors()或時(shí)$validation->showError(),它將在后臺(tái)加載一個(gè)視圖文件,該文件確定錯(cuò)誤的顯示方式。默認(rèn)情況下,它們errors在包裝div上顯示為類。您可以輕松創(chuàng)建新視圖并在整個(gè)應(yīng)用程序中使用它們。

創(chuàng)建視圖

第一步是創(chuàng)建自定義視圖。它們可以放置在view()方法可以找到它們的任何位置,這意味著標(biāo)準(zhǔn)View目錄或任何命名空間的View文件夾都可以使用。例如,您可以在/app/Views/_errors_list.php中創(chuàng)建一個(gè)新視圖:

<div class="alert alert-danger" role="alert">
    <ul>
    <?php foreach ($errors as $error) : ?>
        <li><?= esc($error) ?></li>
    <?php endforeach ?>
    </ul>
</div>

$errors在視圖中包含一個(gè)名為error 的數(shù)組,該數(shù)組包含錯(cuò)誤列表,其中key是發(fā)生錯(cuò)誤的字段的名稱,value是錯(cuò)誤消息,如下所示:

$errors = [
    'username' => 'The username field must be unique.',
    'email'    => 'You must provide a valid email address.'
];

您實(shí)際上可以創(chuàng)建兩種視圖。第一個(gè)數(shù)組包含所有錯(cuò)誤,這就是我們剛剛查看的內(nèi)容。另一種類型比較簡單,僅包含一個(gè)$error包含錯(cuò)誤消息的變量。這與showError()必須指定字段的方法一起使用:

<span class="help-block"><?= esc($error) ?></span>

組態(tài)

創(chuàng)建視圖后,需要讓Validation庫知道它們。打開Config/Validation.php。在內(nèi)部,您將找到該$templates屬性,可以在其中列出所需的任意數(shù)量的自定義視圖,并提供一個(gè)簡短的別名,以供參考。如果要從上方添加示例文件,則該文件應(yīng)類似于:

public $templates = [
    'list'    => 'CodeIgniter\Validation\Views\list',
    'single'  => 'CodeIgniter\Validation\Views\single',
    'my_list' => '_errors_list'
];

指定模板

您可以通過將其別名作為第一個(gè)參數(shù)傳遞來指定要使用的模板listErrors

<?= $validation->listErrors('my_list') ?>

當(dāng)顯示特定于字段的錯(cuò)誤時(shí),您可以將別名作為第二個(gè)參數(shù)傳遞給showError方法,該錯(cuò)誤應(yīng)該在字段名稱之后:

<?= $validation->showError('username', 'my_single') ?>

創(chuàng)建自定義規(guī)則

規(guī)則存儲(chǔ)在簡單的命名空間類中。只要自動(dòng)裝帶器可以找到它們,它們就可以存儲(chǔ)在您想要的任何位置。這些文件稱為RuleSets。要添加新的RuleSet,請(qǐng)編輯Config / Validation.php并將新文件添加到$ruleSets數(shù)組中:

public $ruleSets = [
    \CodeIgniter\Validation\Rules::class,
    \CodeIgniter\Validation\FileRules::class,
    \CodeIgniter\Validation\CreditCardRules::class,
];

您可以將其添加為具有完全限定的類名的簡單字符串,也可以使用::class如上所示的后綴添加。這里的主要好處是,它在更高級(jí)的IDE中提供了一些額外的導(dǎo)航功能。

在文件本身中,每個(gè)方法都是一個(gè)規(guī)則,必須接受字符串作為第一個(gè)參數(shù),并且必須返回布爾值true或false值,如果它通過測試則表示true,否則返回false:

class MyRules
{
    public function even(string $str): bool
    {
        return (int)$str % 2 == 0;
    }
}

默認(rèn)情況下,系統(tǒng)將CodeIgniter\Language\en\Validation.php在錯(cuò)誤中查找所使用的語言字符串。在自定義規(guī)則中,您可以通過引用第二個(gè)參數(shù)中的$ error變量來提供錯(cuò)誤消息:

public function even(string $str, string &$error = null): bool
{
    if ((int)$str % 2 != 0)
    {
        $error = lang('myerrors.evenError');
        return false;
    }


    return true;
}

現(xiàn)在,您可以像使用其他任何規(guī)則一樣使用新的自定義規(guī)則:

$this->validate($request, [
    'foo' => 'required|even'
]);

允許參數(shù)

如果您的方法需要使用參數(shù),則該函數(shù)將至少需要三個(gè)參數(shù):要驗(yàn)證的字符串,參數(shù)字符串以及包含已提交表單的所有數(shù)據(jù)的數(shù)組。$ data數(shù)組對(duì)于這樣的規(guī)則特別方便,該規(guī)則require_with需要檢查另一個(gè)提交字段的值以使其結(jié)果基于:

public function required_with($str, string $fields, array $data): bool
{
    $fields = explode(',', $fields);


    // If the field is present we can safely assume that
    // the field is here, no matter whether the corresponding
    // search field is present or not.
    $present = $this->required($str ?? '');


    if ($present)
    {
        return true;
    }


    // Still here? Then we fail this test if
    // any of the fields are present in $data
    // as $fields is the lis
    $requiredFields = [];


    foreach ($fields as $field)
    {
        if (array_key_exists($field, $data))
        {
            $requiredFields[] = $field;
        }
    }


    // Remove any keys with empty values since, that means they
    // weren't truly there, as far as this is concerned.
    $requiredFields = array_filter($requiredFields, function ($item) use ($data) {
        return ! empty($data[$item]);
    });


    return empty($requiredFields);
}

如上所述,可以將自定義錯(cuò)誤作為第四個(gè)參數(shù)返回。

可用規(guī)則

以下是所有可用的本機(jī)規(guī)則的列表:

注解

Rule是一個(gè)字符串;必須有沒有空格的參數(shù)之間,尤其是is_unique規(guī)則。前后不能有空格ignore_value。

// is_unique[table.field,ignore_field,ignore_value]


$validation->setRules([
    'name' => "is_unique[supplier.name,uuid, $uuid]",  // is not ok
    'name' => "is_unique[supplier.name,uuid,$uuid ]",  // is not ok
    'name' => "is_unique[supplier.name,uuid,$uuid]",   // is ok
    'name' => "is_unique[supplier.name,uuid,{uuid}]",  // is ok - see "Validation Placeholders"
]);
規(guī)則 參數(shù) 描述 例子
alpha No 如果字段中沒有字母字符,則失敗。
alpha_space No 如果字段包含字母字符或空格以外的任何內(nèi)容,則失敗。
alpha_dash No 如果字段包含字母數(shù)字字符,下劃線或破折號(hào)以外的任何內(nèi)容,則失敗。
alpha_numeric No 如果字段包含字母數(shù)字字符以外的內(nèi)容,則失敗。
alpha_numeric_space No 如果field包含字母數(shù)字或空格字符以外的內(nèi)容,則失敗。
alpha_numeric_punct No 如果field包含字母數(shù)字,空格或這組有限的標(biāo)點(diǎn)字符之外的內(nèi)容,則失?。?(波浪號(hào))、! (感嘆號(hào)),#(數(shù)字),$(美元),%(百分比),&(與號(hào)),*(星號(hào)),-(破折號(hào)),_(下劃線),+(加號(hào)),=(等于), /|(豎線),:(冒號(hào))、。(期)。
decimal No 如果字段中包含除十進(jìn)制數(shù)字以外的任何內(nèi)容,則失敗。也接受數(shù)字的+或-號(hào)。
differs Yes 如果字段與參數(shù)中的字段相同,則失敗。 differs[field_name]
exact_length Yes 如果field不完全是參數(shù)值,則失敗。一個(gè)或多個(gè)逗號(hào)分隔的值。 exact_length[5] or exact_length[5,8,12]
greater_than Yes 如果field小于或等于參數(shù)值或非數(shù)字,則失敗。 greater_than[8]
greater_than_equal_to Yes 如果field小于參數(shù)值,或者不是數(shù)字,則失敗。 greater_than_equal_to[5]
hex No 如果field包含十六進(jìn)制字符以外的任何內(nèi)容,則失敗。
if_exist No 如果存在此規(guī)則,則驗(yàn)證僅在存在字段密鑰的情況下返回可能的錯(cuò)誤,而不管其值如何。
in_list Yes 如果字段不在預(yù)定列表內(nèi),則失敗。 in_list[red,blue,green]
integer No 如果field包含除整數(shù)以外的任何內(nèi)容,則失敗。
is_natural No 如果field包含非自然數(shù)之外的任何內(nèi)容,則失?。?、1、2、3等。
is_natural_no_zero No 如果字段包含自然數(shù)以外的任何內(nèi)容(零,1、2、3等除外),則失敗。
is_not_unique Yes 檢查數(shù)據(jù)庫以查看給定值是否存在??梢院雎园醋侄?值進(jìn)行過濾的記錄(當(dāng)前僅接受一個(gè)過濾器)。 is_not_unique[table.field,where_field,where_value]
is_unique Yes 檢查此字段值在數(shù)據(jù)庫中是否存在。(可選)設(shè)置要忽略的列和值,在更新記錄以忽略自身時(shí)很有用。 is_unique[table.field,ignore_field,ignore_value]
less_than Yes 如果field大于或等于參數(shù)值或非數(shù)字,則失敗。 less_than[8]
less_than_equal_to Yes 如果field大于參數(shù)值或非數(shù)字,則失敗。 less_than_equal_to[8]
matches Yes 該值必須與參數(shù)中字段的值匹配。 matches[field]
max_length Yes 如果字段長于參數(shù)值,則失敗。 max_length[8]
min_length Yes 如果字段小于參數(shù)值,則失敗。 min_length[3]
numeric No 如果字段中包含數(shù)字字符以外的任何內(nèi)容,則失敗。
regex_match Yes 如果字段與正則表達(dá)式不匹配,則失敗。 regex_match[/regex/]
permit_empty No 允許該字段接收一個(gè)空數(shù)組,空字符串,null或false。
required No 如果字段是空數(shù)組,空字符串,null或false,則失敗。
required_with Yes 如果數(shù)據(jù)中存在其他任何必填字段,則該字段為必填字段。 required_with[field1,field2]
required_without Yes 當(dāng)數(shù)據(jù)中存在所有其他字段時(shí),該字段是必需的,但不是必需的。 required_without[field1,field2]
string No 確認(rèn)元素為字符串的alpha *規(guī)則的通用替代方法
timezone No 如果字段確實(shí)與時(shí)區(qū)匹配,則失敗 timezone_identifiers_list
valid_base64 No 如果字段包含有效Base64字符以外的任何內(nèi)容,則失敗。
valid_json No 如果field不包含有效的JSON字符串,則失敗。
valid_email No 如果該字段不包含有效的電子郵件地址,則失敗。
valid_emails No 如果逗號(hào)分隔列表中提供的任何值不是有效電子郵件,則失敗。
valid_ip No 如果提供的IP無效,則失敗。接受可選參數(shù)“ ipv4”或“ ipv6”以指定IP格式。 valid_ip[ipv6]
valid_url No 如果字段不包含有效的URL,則失敗。
valid_date No 如果字段不包含有效日期,則失敗。接受可選參數(shù)以匹配日期格式。 valid_date[d/m/Y]
valid_cc_number Yes 驗(yàn)證信用卡號(hào)是否與指定提供者使用的格式匹配。當(dāng)前受支持的提供商包括:美國運(yùn)通(amex),中國銀聯(lián)(unionpay),大來俱樂部CarteBlance(carteblanche),大來俱樂部(dinersclub),發(fā)現(xiàn)卡(discover),轉(zhuǎn)賬(interpayment),JCB(jcb),Maestro(maestro) ,Dankort(dankort),NSPK MIR(mir),Troy(troy),MasterCard(mastercard),Visa(visa),UATP(uatp),Verve(verve),CIBC便利卡(cibc),加拿大皇家銀行客戶卡(rbc),道明加拿大信托訪問卡(tdtrust),豐業(yè)銀行Scotia卡(scotia),BMO ABM卡(bmoabm),匯豐加拿大卡(hsbc)

文件上傳規(guī)則

這些驗(yàn)證規(guī)則使您可以進(jìn)行基本檢查,以驗(yàn)證上傳的文件滿足您的業(yè)務(wù)需求。由于文件上載HTML字段的值不存在,并且存儲(chǔ)在$ _FILES全局變量中,因此需要使用兩次輸入字段的名稱。一次指定字段名稱,就像指定其他任何規(guī)則一樣,但再次指定為所有文件上傳相關(guān)規(guī)則的第一個(gè)參數(shù):

// In the HTML
<input type="file" name="avatar">


// In the controller
$this->validate([
    'avatar' => 'uploaded[avatar]|max_size[avatar,1024]'
]);
規(guī)則 參數(shù) 描述 例子
uploaded Yes 如果參數(shù)名稱與任何上載文件的名稱不匹配,則失敗。 uploaded[field_name]
max_size Yes 如果以參數(shù)命名的上載文件大于第二個(gè)參數(shù)(以千字節(jié)(kb)為單位),則失敗。 max_size [field_name,2048]
max_dims Yes 如果上傳的圖像的最大寬度和高度超過值,則失敗。第一個(gè)參數(shù)是字段名稱。第二個(gè)是寬度,第三個(gè)是高度。如果無法將文件確定為圖像,也會(huì)失敗。 max_dims [field_name,300,150]
mime_in Yes 如果文件的mime類型不是參數(shù)中列出的MIME類型,則失敗。 mime_in [field_name,image / png,image / jpg]
ext_in Yes 如果文件的擴(kuò)展名不是參數(shù)中列出的擴(kuò)展名之一,則失敗。 ext_in [field_name,png,jpg,gif]
is_image Yes 如果無法根據(jù)mime類型將文件確定為圖像,則失敗。 is_image [field_name]

文件驗(yàn)證規(guī)則適用于單個(gè)文件上傳和多個(gè)文件上傳。

注解

您還可以使用任何允許最多兩個(gè)參數(shù)的本地PHP函數(shù),其中至少需要一個(gè)參數(shù)(以傳遞字段數(shù)據(jù))。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)