CodeIgniter提供了一個(gè)全面的數(shù)據(jù)驗(yàn)證類,該類有助于最大程度地減少您要編寫的代碼量。
在解釋CodeIgniter的數(shù)據(jù)驗(yàn)證方法之前,讓我們描述理想的情況:
在接收端,腳本必須:
盡管上述過程沒有什么非常復(fù)雜的,但通常需要大量代碼,并且為了顯示錯(cuò)誤消息,通常將各種控制結(jié)構(gòu)放置在HTML形式內(nèi)。表單驗(yàn)證雖然易于創(chuàng)建,但實(shí)現(xiàn)起來通常非常麻煩且乏味。
接下來是實(shí)現(xiàn)CodeIgniter的表單驗(yàn)證的“動(dòng)手”教程。
為了實(shí)現(xiàn)表單驗(yàn)證,您需要三件事:
讓我們以成員注冊(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表單,但有一些例外:
<?= $validation->listErrors() ?>
此函數(shù)將返回驗(yàn)證器發(fā)送回的所有錯(cuò)誤消息。如果沒有消息,則返回一個(gè)空字符串。
控制器(Form.php)具有一種方法:index()
。此方法使用Controller提供的validate方法,并加載視圖文件使用的表單幫助器和URL幫助器。它還運(yùn)行驗(yàn)證例程。根據(jù)驗(yàn)證是否成功,它會(huì)顯示表單或成功頁面。
該庫作為名為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)證變得更加容易的方法。
使用CodeIgniter,您可以為給定字段設(shè)置所需數(shù)量的驗(yàn)證規(guī)則,并按順序?qū)盈B它們。要設(shè)置驗(yàn)證規(guī)則,你將使用setRule()
,setRules()
或withRequest()
方法。
此方法設(shè)置單個(gè)規(guī)則。它以字段名稱為第一個(gè)參數(shù),使用可選標(biāo)簽和帶有以豎線分隔的規(guī)則列表的字符串,應(yīng)將其應(yīng)用:
$validation->setRule('username', 'Username', 'required');
該字段名必須與在發(fā)送的任何數(shù)據(jù)陣列的密鑰相匹配,如果數(shù)據(jù)是從$ _POST直接采取,那么它必須是形式輸入名稱的精確匹配。
類似于,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]']
]);
在驗(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();
如果您的數(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'
]);
根據(jù)規(guī)則驗(yàn)證一個(gè)值:
$validation->check($value, 'required');
Validation類的一個(gè)不錯(cuò)的功能是,它允許您將整個(gè)應(yīng)用程序的所有驗(yàn)證規(guī)則存儲(chǔ)在配置文件中。您將規(guī)則組織為“組”。您可以在每次運(yùn)行驗(yàn)證時(shí)指定一個(gè)不同的組。
要存儲(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)參見下文。
獲取規(guī)則組
此方法從驗(yàn)證配置中獲取一個(gè)規(guī)則組:
$validation->getRuleGroup('signup');
設(shè)定規(guī)則組
此方法將規(guī)則組從驗(yàn)證配置設(shè)置為驗(yàn)證服務(wù):
$validation->setRuleGroup('signup');
注解
run()
方法不會(huì)重置錯(cuò)誤狀態(tài)。如果先前的運(yùn)行失敗,run()
它將始終返回falsegetErrors()
并將返回所有先前的錯(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
}
}
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ī)則。
驗(yàn)證庫提供了幾種方法來幫助您設(shè)置錯(cuò)誤消息,提供自定義錯(cuò)誤消息以及檢索要顯示的一個(gè)或多個(gè)錯(cuò)誤。
默認(rèn)情況下,錯(cuò)誤消息是從中的語言字符串派生的system/Language/en/Validation.php
,其中每個(gè)規(guī)則都有一個(gè)條目。
兩個(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ò)誤消息將被忽略。
要使用語言文件中的翻譯字符串,我們可以簡單地使用點(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ò)誤消息,則可以使用以下getErrors()
方法:
$errors = $validation->getErrors();
// Returns:
[
'field1' => 'error message',
'field2' => 'error message',
]
如果沒有錯(cuò)誤,將返回一個(gè)空數(shù)組。
您可以使用方法檢索單個(gè)字段的錯(cuò)誤getError()
。唯一的參數(shù)是字段名稱:
$error = $validation->getError('username');
如果沒有錯(cuò)誤,將返回一個(gè)空字符串。
您可以檢查該hasError()
方法是否存在錯(cuò)誤。唯一的參數(shù)是字段名稱:
if ($validation->hasError('username'))
{
echo $validation->getError('username');
}
當(dāng)您調(diào)用$validation->listErrors()
或時(shí)$validation->showError()
,它將在后臺(tái)加載一個(gè)視圖文件,該文件確定錯(cuò)誤的顯示方式。默認(rèn)情況下,它們errors
在包裝div上顯示為類。您可以輕松創(chuàng)建新視圖并在整個(gè)應(yī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>
創(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') ?>
規(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ù)將至少需要三個(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ù)返回。
以下是所有可用的本機(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) |
這些驗(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ù))。
更多建議: