目錄
鑰匙要點
有想法嗎?問題?在評論中開火。
>我可以將Laravel的內置驗證規則與我的自定義規則一起使用嗎?這可以通過在驗證邏輯中將驗證規則鏈接在一起來完成。例如,您可以使用“必需”規則來確保字段不是空的,然後使用自定義規則驗證數據的格式。
Laravel使您可以輕鬆在視圖中顯示驗證錯誤消息。當驗證失敗時,Laravel將用戶重定向到他們的先前位置,並在會話中存儲了所有驗證錯誤。然後,您可以使用$錯誤變量在視圖中顯示這些錯誤,該變量會自動通過Laravel提供。是的,Laravel允許您自定義驗證規則自定義錯誤消息。這可以通過在語言文件中定義自定義消息,然後在驗證邏輯中引用這些消息來完成。這使您可以靈活地根據應用程序的特定需求來量身定制錯誤消息。
Laravel提供了一種使用“點表示”驗證數組的方便方法。您可以指定要驗證的數組字段,然後將驗證規則應用於其。例如,如果您有一系列電子郵件,則可以使用“電子郵件”驗證規則在數組中驗證每個電子郵件。
如何在laravel中驗證文件上傳?圖像','Mimes'和“大小”。這些規則允許您驗證上載文件的類型和大小,以確保它符合您的應用程序的要求。
>如何處理Laravel中的驗證失敗?
首頁 後端開發 php教程 Laravel中的數據驗證:正確的方式 - 自定義驗證器

Laravel中的數據驗證:正確的方式 - 自定義驗證器

Feb 20, 2025 am 11:35 AM

Data Validation in Laravel: The Right Way - Custom Validators

Laravel中的數據驗證:正確的方式 - 自定義驗證器

鑰匙要點

    可以擴展Laravel的內置數據驗證軟件包,以為特定需求創建自定義驗證規則,例如驗證包含空格的全名代碼或PIN代碼。
  • 通過擴展Laravel的IlluminateValidationValidator類並添加新方法來驗證數據及其各自的錯誤消息,可以創建自定義驗證規則。
  • >
  • >新的驗證規則必須用“ validate”前綴和標題案例中的其餘名稱命名。驗證規則將在該方法所命名的內容(沒有“ validate”前綴)的小寫中,每個單詞將被下劃線分開。 >
  • 創建自定義驗證規則後,需要創建服務提供商將這些規則綁定到Laravel的驗證包中。然後,通過app/config/app.php文件,Laravel加載了此服務提供商
  • 在上一部分中,我們學會瞭如何使用其內置數據驗證軟件包驗證Laravel中的數據,以及如何將我們的數據驗證抽象為特定的特定服務,以使代碼可重複使用Dry原理。現在,我們可以通過其各自的驗證規則為我們的應用程序中的每個實體創建驗證服務,並將其註入到我們要驗證數據並輕鬆獲取和顯示錯誤等的任何位置等。
  • 但是,如果我們想要更多?
  • >
>

本教程的源代碼可在此處提供。您只需要在能夠運行此代碼之前運行Composer安裝即可在項目目錄內安裝Laravel Framework。

需要更多

開箱即用的
> Laravel提供了許多有用且通用的驗證規則。但是,如果我們想要更多呢?如果我們需要更具體的東西怎麼辦?在我們的示例中,在TestFormValidator中,我們使用alpha_dash來驗證名稱,但這不是驗證全名的理想選擇。通常,一個人的全名將包括一個名字和姓氏,也許還有一個中間名。所有這些都將被一個空間隔開。同樣,如果我們想以形式驗證PIN代碼,我們不能使用Laravel提供的Alpha_num規則,我們也應該能夠允許其中的空間。 >

好吧,Laravel提供了輕鬆擴展其驗證軟件包並向其添加自定義驗證規則的選項。在RocketCandy/services/驗證/Create validatorextended.php中,並向其添加以下代碼:>

<span><span><?php
</span></span><span>
</span><span><span>namespace RocketCandy<span>\Services\Validation</span>;
</span></span><span>
</span><span><span>use Illuminate<span>\Validation\Validator</span> as IlluminateValidator;
</span></span><span>
</span><span><span>class ValidatorExtended extends IlluminateValidator {
</span></span><span>
</span><span>	<span>private $_custom_messages = array(
</span></span><span>		<span>"alpha_dash_spaces" => "The :attribute may only contain letters, spaces, and dashes.",
</span></span><span>		<span>"alpha_num_spaces" => "The :attribute may only contain letters, numbers, and spaces.",
</span></span><span>	<span>);
</span></span><span>
</span><span>	<span>public function __construct( $translator, $data, $rules, $messages = array(), $customAttributes = array() ) {
</span></span><span>		<span><span>parent::</span>__construct( $translator, $data, $rules, $messages, $customAttributes );
</span></span><span>
</span><span>		<span>$this->_set_custom_stuff();
</span></span><span>	<span>}
</span></span><span>
</span><span>	<span>/**
</span></span><span><span>	 * Setup any customizations etc
</span></span><span><span>	 *
</span></span><span><span>	 * <span>@return <span>void</span>
</span></span></span><span><span>	 */
</span></span><span>	<span>protected function _set_custom_stuff() {
</span></span><span>		<span>//setup our custom error messages
</span></span><span>		<span>$this->setCustomMessages( $this->_custom_messages );
</span></span><span>	<span>}
</span></span><span>
</span><span>	<span>/**
</span></span><span><span>	 * Allow only alphabets, spaces and dashes (hyphens and underscores)
</span></span><span><span>	 *
</span></span><span><span>	 * <span>@param <span>string</span> $attribute
</span></span></span><span><span>	 * <span>@param <span>mixed</span> $value
</span></span></span><span><span>	 * <span>@return <span>bool</span>
</span></span></span><span><span>	 */
</span></span><span>	<span>protected function validateAlphaDashSpaces( $attribute, $value ) {
</span></span><span>		<span>return (bool) preg_match( "/^[A-Za-z\s-_]+$/", $value );
</span></span><span>	<span>}
</span></span><span>
</span><span>	<span>/**
</span></span><span><span>	 * Allow only alphabets, numbers, and spaces
</span></span><span><span>	 *
</span></span><span><span>	 * <span>@param <span>string</span> $attribute
</span></span></span><span><span>	 * <span>@param <span>mixed</span> $value
</span></span></span><span><span>	 * <span>@return <span>bool</span>
</span></span></span><span><span>	 */
</span></span><span>	<span>protected function validateAlphaNumSpaces( $attribute, $value ) {
</span></span><span>		<span>return (bool) preg_match( "/^[A-Za-z0-9\s]+$/", $value );
</span></span><span>	<span>}
</span></span><span>
</span><span><span>}	//end of class
</span></span><span>
</span><span>
</span><span><span>//EOF</span></span>
登入後複製
登入後複製

>在這裡,我們的同類將Laravel的IlluminateValidationValidator類擴展並添加了兩種新方法(dialatealphadashspaces()和varteratealatealphanumspaces()),以驗證數據及其各自的錯誤消息與占位符:屬性:屬性中的attribute中的屬性將在其中替換為runavel,以替換為運行時的名稱。正在驗證的數據字段。

現在要注意的是我們如何命名方法。所有驗證規則方法名稱必須具有驗證前綴,其餘的必須在標題案例中(當然沒有空格)。驗證規則將以命名方法的小寫(無驗證前綴)為小寫,每個單詞將被下劃線分開。因此,如果我們要添加alpha_dash_spaces驗證規則,那麼我們的相應方法將被命名為dialatealphadashspaces()。

因此,我們在此處添加了Alpha_Dash_spaces和Alpha_num_spaces驗證規則。 alpha_dash_spaces將允許字母,破折號(連字符和下劃線)和空格,而Alpha_num_spaces將僅允許字母,數字(數字0-9)和空格。

>

>我們尚未完成此課程,此類僅擴展了Laravel的驗證類。我們仍然必須使Laravel認識到它,以便當我們將新規則添加到上面的Vaidation服務中時,Laravel將知道如何根據這些規則進行驗證。

laravel文檔指出我們可以做到這一點:

<span>Validator<span>::</span>resolver( function( $translator, $data, $rules, $messages ) {
</span>	<span>return new <span>\RocketCandy\Services\Validation\ValidatorExtended</span>( $translator, $data, $rules, $messages );
</span><span>} );</span>
登入後複製
登入後複製
並將其粘貼在app/start/global.php中,或者在應用程序目錄中創建一個新文件,然後將該文件加載到app/start/global.php中。但這看起來並不干淨,修改文件我們不需要修改,在這里和那裡都貼上碎屑和碎片。不,我們寧願將所有這些相關的代碼放在一起,因此我們將創建一個服務提供商,並將我們的自定義驗證規則粘合到Laravel的驗證程序包中。

create verialationExtensionserviceProvider.php rocketcandy/services/verasonation/incem of tastectenserviceprovider.php/添加以下代碼:>

如果您已經在Laravel創建了一個服務提供商,則通常使用register()方法來執行所需的任何綁定。這是我們在這裡擴展的抽像類LimuminateUpporterServiceProvider中唯一的抽象方法。我們之所以無法將驗證擴展粘合到register()中,是因為一旦服務提供商加載了Laravel,就會觸發它,我們將遇到一個拋出的異常,因為Laravel以後將其驗證套件初始化,因此我們將稍後初始化其驗證包,因此我們將嘗試使用不存在的對象擴展不存在的東西。另一方面,啟動()方法是在請求路由之前觸發的,因此我們可以將其安全地粘貼到Laravel的驗證包中。
<span><span><?php
</span></span><span>
</span><span><span>namespace RocketCandy<span>\Services\Validation</span>;
</span></span><span>
</span><span><span>use Illuminate<span>\Support\ServiceProvider</span>;
</span></span><span>
</span><span><span>class ValidationExtensionServiceProvider extends ServiceProvider {
</span></span><span>
</span><span>	<span>public function register() {}
</span></span><span>
</span><span>	<span>public function boot() {
</span></span><span>		<span>$this->app->validator->resolver( function( $translator, $data, $rules, $messages = array(), $customAttributes = array() ) {
</span></span><span>			<span>return new ValidatorExtended( $translator, $data, $rules, $messages, $customAttributes );
</span></span><span>		<span>} );
</span></span><span>	<span>}
</span></span><span>
</span><span><span>}	//end of class
</span></span><span>
</span><span>
</span><span><span>//EOF</span></span>
登入後複製
>

>現在,我們只需要告訴Laravel加載此服務提供商,我們將全部設置。打開您的應用程序/config/app.php,在提供商數組中添加以下內容:>

<span><span><?php
</span></span><span>
</span><span><span>namespace RocketCandy<span>\Services\Validation</span>;
</span></span><span>
</span><span><span>use Illuminate<span>\Validation\Validator</span> as IlluminateValidator;
</span></span><span>
</span><span><span>class ValidatorExtended extends IlluminateValidator {
</span></span><span>
</span><span>	<span>private $_custom_messages = array(
</span></span><span>		<span>"alpha_dash_spaces" => "The :attribute may only contain letters, spaces, and dashes.",
</span></span><span>		<span>"alpha_num_spaces" => "The :attribute may only contain letters, numbers, and spaces.",
</span></span><span>	<span>);
</span></span><span>
</span><span>	<span>public function __construct( $translator, $data, $rules, $messages = array(), $customAttributes = array() ) {
</span></span><span>		<span><span>parent::</span>__construct( $translator, $data, $rules, $messages, $customAttributes );
</span></span><span>
</span><span>		<span>$this->_set_custom_stuff();
</span></span><span>	<span>}
</span></span><span>
</span><span>	<span>/**
</span></span><span><span>	 * Setup any customizations etc
</span></span><span><span>	 *
</span></span><span><span>	 * <span>@return <span>void</span>
</span></span></span><span><span>	 */
</span></span><span>	<span>protected function _set_custom_stuff() {
</span></span><span>		<span>//setup our custom error messages
</span></span><span>		<span>$this->setCustomMessages( $this->_custom_messages );
</span></span><span>	<span>}
</span></span><span>
</span><span>	<span>/**
</span></span><span><span>	 * Allow only alphabets, spaces and dashes (hyphens and underscores)
</span></span><span><span>	 *
</span></span><span><span>	 * <span>@param <span>string</span> $attribute
</span></span></span><span><span>	 * <span>@param <span>mixed</span> $value
</span></span></span><span><span>	 * <span>@return <span>bool</span>
</span></span></span><span><span>	 */
</span></span><span>	<span>protected function validateAlphaDashSpaces( $attribute, $value ) {
</span></span><span>		<span>return (bool) preg_match( "/^[A-Za-z\s-_]+$/", $value );
</span></span><span>	<span>}
</span></span><span>
</span><span>	<span>/**
</span></span><span><span>	 * Allow only alphabets, numbers, and spaces
</span></span><span><span>	 *
</span></span><span><span>	 * <span>@param <span>string</span> $attribute
</span></span></span><span><span>	 * <span>@param <span>mixed</span> $value
</span></span></span><span><span>	 * <span>@return <span>bool</span>
</span></span></span><span><span>	 */
</span></span><span>	<span>protected function validateAlphaNumSpaces( $attribute, $value ) {
</span></span><span>		<span>return (bool) preg_match( "/^[A-Za-z0-9\s]+$/", $value );
</span></span><span>	<span>}
</span></span><span>
</span><span><span>}	//end of class
</span></span><span>
</span><span>
</span><span><span>//EOF</span></span>
登入後複製
登入後複製

現在,打開app/rocketcandy/services/validation/testformvalidator.php並更新$規則屬性,以便看起來像這樣:

<span>Validator<span>::</span>resolver( function( $translator, $data, $rules, $messages ) {
</span>	<span>return new <span>\RocketCandy\Services\Validation\ValidatorExtended</span>( $translator, $data, $rules, $messages );
</span><span>} );</span>
登入後複製
登入後複製

我們用alpha_dash_spaces替換了名稱的alpha_dash驗證規則,用alpha_num_spaces替換了pin_code的alpha_num。

現在,如果我們導航到http:// /dummy/create,我們可以在“名稱和PIN代碼”字段中輸入空格,而沒有任何問題,並且數據將在提交上傳遞驗證。

>

摘要

因此,在這兩個部分教程中,我們學會了:

>

    >使用其內置的數據驗證軟件包驗證Laravel中的數據。 >
  1. >使用面向對象的方法將數據驗證抽象為其自己的獨立服務(
  2. 單一責任
  3. 成就已解鎖)。 >創建我們自己的自定義異常,以與我們的數據驗證服務一起使用(而不是使用true/false boolean值)以及如何存儲和檢索它們的錯誤。
  4. >在控制器中註入我們的數據驗證服務並使用它。
  5. >
  6. >使用我們的自定義驗證規則擴展了Laravel的驗證軟件包,並使用服務提供商自動加載它。
  7. >腳註
  8. 為了將本教程保留到我將驗證服務注入我們的控制器並在此處使用的點。在一個真實的項目中,您很可能會在其他地方使用驗證服務,在此處處理數據消毒和存儲。理想情況下,控制器應不含脂肪,並且最少的代碼。

有想法嗎?問題?在評論中開火。

>關於Laravel數據驗證和自定義驗證器的常見問題


>使用Laravel進行數據驗證有什麼好處?它提供了各種驗證規則,這些規則可以輕鬆地應用於您的數據,以確保在處理之前符合所需的標準。 Laravel的驗證系統還允許自定義驗證規則,使您能夠定義自己的數據驗證標準。當您需要以Laravel的內置驗證規則不涵蓋的方式驗證數據時。您使用驗證器:: Extend方法創建自定義驗證規則。此方法採用兩個參數:驗證規則的名稱和接收三個參數的閉合:屬性名稱,屬性值和失敗回調。在關閉中,您可以為自定義驗證規則定義邏輯。如果驗證失敗,則應通過適當的錯誤消息調用失敗回調。

>我可以將Laravel的內置驗證規則與我的自定義規則一起使用嗎?這可以通過在驗證邏輯中將驗證規則鏈接在一起來完成。例如,您可以使用“必需”規則來確保字段不是空的,然後使用自定義規則驗證數據的格式。

>

如何在laravel中顯示驗證錯誤消息?

Laravel使您可以輕鬆在視圖中顯示驗證錯誤消息。當驗證失敗時,Laravel將用戶重定向到他們的先前位置,並在會話中存儲了所有驗證錯誤。然後,您可以使用$錯誤變量在視圖中顯示這些錯誤,該變量會自動通過Laravel提供。是的,Laravel允許您自定義驗證規則自定義錯誤消息。這可以通過在語言文件中定義自定義消息,然後在驗證邏輯中引用這些消息來完成。這使您可以靈活地根據應用程序的特定需求來量身定制錯誤消息。

>如何驗證Laravel中的數組?

Laravel提供了一種使用“點表示”驗證數組的方便方法。您可以指定要驗證的數組字段,然後將驗證規則應用於其。例如,如果您有一系列電子郵件,則可以使用“電子郵件”驗證規則在數組中驗證每個電子郵件。

>

>我可以在laravel中使用條件驗證規則嗎? Laravel允許您使用條件驗證規則。這意味著您只有在滿足其他條件時才可以應用某些驗證規則。可以使用驗證器實例上的有時方法來完成此操作。

如何在laravel中驗證文件上傳?圖像','Mimes'和“大小”。這些規則允許您驗證上載文件的類型和大小,以確保它符合您的應用程序的要求。

>

>我可以在表單請求中使用自定義驗證規則嗎?表單請求中的自定義驗證規則。這可以通過在表單請求類的規則方法中定義規則來完成。然後,您可以在驗證表單請求數據時使用這些規則。

>

>如何處理Laravel中的驗證失敗?

>

>當驗證失敗在Laravel中時,它會自動將用戶重定向到他們的先前位置在會話中存儲了所有驗證錯誤。然後,您可以在視圖中處理這些錯誤,以適合您的應用程序的方式顯示給用戶。 >

以上是Laravel中的數據驗證:正確的方式 - 自定義驗證器的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1667
14
CakePHP 教程
1426
52
Laravel 教程
1328
25
PHP教程
1273
29
C# 教程
1255
24
說明PHP中的安全密碼散列(例如,password_hash,password_verify)。為什麼不使用MD5或SHA1? 說明PHP中的安全密碼散列(例如,password_hash,password_verify)。為什麼不使用MD5或SHA1? Apr 17, 2025 am 12:06 AM

在PHP中,應使用password_hash和password_verify函數實現安全的密碼哈希處理,不應使用MD5或SHA1。1)password_hash生成包含鹽值的哈希,增強安全性。 2)password_verify驗證密碼,通過比較哈希值確保安全。 3)MD5和SHA1易受攻擊且缺乏鹽值,不適合現代密碼安全。

PHP:網絡開發的關鍵語言 PHP:網絡開發的關鍵語言 Apr 13, 2025 am 12:08 AM

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP和Python:比較兩種流行的編程語言 PHP和Python:比較兩種流行的編程語言 Apr 14, 2025 am 12:13 AM

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP行動:現實世界中的示例和應用程序 PHP行動:現實世界中的示例和應用程序 Apr 14, 2025 am 12:19 AM

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP類型提示如何起作用,包括標量類型,返回類型,聯合類型和無效類型? PHP類型提示如何起作用,包括標量類型,返回類型,聯合類型和無效類型? Apr 17, 2025 am 12:25 AM

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。

PHP的持久相關性:它還活著嗎? PHP的持久相關性:它還活著嗎? Apr 14, 2025 am 12:12 AM

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

PHP和Python:解釋了不同的範例 PHP和Python:解釋了不同的範例 Apr 18, 2025 am 12:26 AM

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

PHP與其他語言:比較 PHP與其他語言:比較 Apr 13, 2025 am 12:19 AM

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

See all articles