Laravel 5.5 中怎么自定義驗(yàn)證對(duì)象,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

Laravel 5.5 將提供一個(gè)全新的自定義驗(yàn)證規(guī)則的對(duì)象,以作為原來(lái)的 Validator::extend 方法的替代。很多時(shí)候我們會(huì)直接用正則表達(dá)式來(lái)處理這種特殊的驗(yàn)證,也有時(shí)候我們會(huì)選擇用 Validator::extend 來(lái)擴(kuò)展一個(gè)自定義的規(guī)則。但在 Laravel 5.5 版本中,我們有了新的手段,只要定義一個(gè)實(shí)現(xiàn) Illuminate\Contracts\Validation\Rule 接口的類(lèi)即可實(shí)現(xiàn)自定義的驗(yàn)證規(guī)則,并可以直接使用。
下面是一個(gè)簡(jiǎn)單的示例:
use Illuminate\Contracts\Validation\Rule;
class IsOddValidationRule implements Rule
{
public function passes($attributes, $value)
{
return ($value % 2 !== 0);
}
public function message()
{
return ':attribute 必須是奇數(shù)';
}
}以上代碼定義了一個(gè) IsOddValidationRule 的自定義驗(yàn)證類(lèi),在 Controller 中要使用這個(gè)驗(yàn)證類(lèi)的話(huà),可以這樣寫(xiě):
public function handlForm(Request $request)
{
$this->validate($request, [
'oddField' => [new IsOddValidationRule]
]);
}同樣的效果,也可以通過(guò)匿名函數(shù)(閉包函數(shù))來(lái)實(shí)現(xiàn):
public function handleForm(Request $request)
{
$this->validate($request, [
'oddField' => [function($attributes, $value, $fail) {
if ($value % 2 === 0) {
$fail(':attribute 必須是奇數(shù)!');
}
}]
]);
}在驗(yàn)證的表單項(xiàng)為空值或者不存在的時(shí)候,對(duì)應(yīng)的自定義驗(yàn)證規(guī)則不會(huì)執(zhí)行。這個(gè)與系統(tǒng)自帶的驗(yàn)證規(guī)則的邏輯是一致的。如果你希望你的自定義驗(yàn)證規(guī)則,即使是在對(duì)應(yīng)的表單項(xiàng)為空值時(shí)也被執(zhí)行的話(huà),那么只要把繼承的接口從 rule 改成 ImplicitRule 即可:
class IsOddValidationRule implements ImplicitRule
{
...
}采用 Laravel 5.5 新增的自定義驗(yàn)證類(lèi),可以更好地管理大量的自定義驗(yàn)證規(guī)則,而且在 PHPStorm 之類(lèi)的 IDE 中,從驗(yàn)證代碼里快速跳轉(zhuǎn)到對(duì)應(yīng)的驗(yàn)證類(lèi)的代碼也會(huì)更方便。畢竟采用 Validator::extend 的話(huà),你只能通過(guò)搜索對(duì)應(yīng)驗(yàn)證類(lèi)名稱(chēng)的字符串來(lái)找到規(guī)則定義的源代碼。
匿名函數(shù)的自定義驗(yàn)證規(guī)則在一次性的簡(jiǎn)單驗(yàn)證邏輯中用起來(lái)確實(shí)會(huì)很方便,或者是在編碼過(guò)程中快速測(cè)試驗(yàn)證邏輯也很實(shí)用。但是總的來(lái)說(shuō),還是建議采用更具組織性和可讀性的自定義驗(yàn)證類(lèi)。很好方法是在編寫(xiě) Controller 的過(guò)程中用匿名函數(shù)快速驗(yàn)證自定義規(guī)則,然后再把它移到自定義的驗(yàn)證類(lèi)對(duì)象中。
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,的支持。
分享文章:Laravel5.5中怎么自定義驗(yàn)證對(duì)象-創(chuàng)新互聯(lián)
文章分享:http://chinadenli.net/article10/cogpgo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、Google、手機(jī)網(wǎng)站建設(shè)、面包屑導(dǎo)航、網(wǎng)站維護(hù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容