国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
什麼是Form Request?
如何用Form Request 做驗證?
怎麼在Form Request 中做權(quán)限控制?
實際使用建議
最後一點小技巧
首頁 php框架 Laravel 使用Laravel表單驗證和授權(quán)請求

使用Laravel表單驗證和授權(quán)請求

Jul 13, 2025 am 02:39 AM
laravel

Form Request 是Laravel 中用於處理表單驗證和權(quán)限控制的專用類,通過繼承Illuminate\Foundation\Http\FormRequest 實現(xiàn)。它將驗證規(guī)則封裝在rules() 方法中,例如定義標(biāo)題和內(nèi)容的校驗規(guī)則,並支持動態(tài)調(diào)整規(guī)則,如排除當(dāng)前文章ID 的唯一性檢查。權(quán)限控制則通過authorize() 方法實現(xiàn),可結(jié)合用戶角色或授權(quán)策略(Policy)判斷是否允許執(zhí)行操作。此外,F(xiàn)orm Request 還支持預(yù)處理數(shù)據(jù)、自定義錯誤提示和屬性名稱,如通過prepareForValidation() 清理輸入,使用messages() 和attributes() 提供友好提示。建議按業(yè)務(wù)場景劃分Form Request 類,並與Policy 配合使用以提高代碼可維護性。

Using Laravel Form Requests for validation and authorization

在Laravel 中,如果你需要同時處理表單驗證和權(quán)限控制,F(xiàn)orm Requests 是一個非常實用的工具。它把驗證邏輯從控制器中抽離出來,不僅讓代碼更清晰,還能統(tǒng)一處理授權(quán)檢查,避免控制器臃腫。

Using Laravel Form Requests for validation and authorization

什麼是Form Request?

Form Request 是Laravel 提供的一種專門用於處理表單請求的類。它本質(zhì)上是一個自定義的請求類,繼承自Illuminate\Foundation\Http\FormRequest ,可以包含驗證規(guī)則、授權(quán)邏輯,甚至還可以預(yù)處理輸入數(shù)據(jù)。

Using Laravel Form Requests for validation and authorization

你可以通過Artisan 命令創(chuàng)建一個Form Request:

 php artisan make:request StorePostRequest

生成的類會放在app/Http/Requests目錄下(如果沒有這個目錄,Laravel 會自動創(chuàng)建)。

Using Laravel Form Requests for validation and authorization

如何用Form Request 做驗證?

驗證是Form Request 的核心功能之一。你只需要在rules()方法中返回一個數(shù)組形式的驗證規(guī)則即可。

比如,假設(shè)你要創(chuàng)建一個文章發(fā)布請求,要求標(biāo)題至少5 個字符,內(nèi)容必須存在:

 public function rules()
{
    return [
        'title' => 'required|string|min:5',
        'content' => 'required|string',
    ];
}

這些規(guī)則會在請求到達控制器之前就被執(zhí)行。如果驗證失敗,Laravel 會自動返回422 狀態(tài)碼以及錯誤信息,無需你在控制器里手動判斷。

此外,你還可以根據(jù)請求動態(tài)調(diào)整規(guī)則,比如編輯時排除當(dāng)前文章ID 的唯一性校驗:

 public function rules()
{
    return [
        'title' => 'required|string|min:5|unique:posts,title,' . $this->post?->id,
    ];
}

怎麼在Form Request 中做權(quán)限控制?

除了驗證之外,F(xiàn)orm Request 還提供了一個authorize()方法,用來判斷當(dāng)前用戶是否有權(quán)限發(fā)起這個請求。

比如,只有管理員才能創(chuàng)建文章:

 public function authorize()
{
    return $this->user()->isAdmin();
}

或者更具體地控制某篇文章的編輯權(quán)限:

 public function authorize()
{
    $post = Post::find($this->route('post'));
    return $this->user()->can('update', $post);
}

這裡用到了Laravel 的授權(quán)策略(Policy),確保用戶有權(quán)限操作對應(yīng)模型。如果返回false,Laravel 會自動返回403 響應(yīng)。

這樣就把權(quán)限判斷也集中到請求對象裡了,而不是散落在各個控制器中。


實際使用建議

  • 按業(yè)務(wù)劃分Form Request :不要為了省事而復(fù)用同一個Form Request 處理多個不同場景。比如“創(chuàng)建文章”和“編輯文章”最好分開兩個類。
  • 結(jié)合Policy 使用授權(quán)邏輯:這樣可以讓授權(quán)邏輯更清晰,並且可以復(fù)用在其他地方。
  • 適當(dāng)使用prepareForValidation預(yù)處理數(shù)據(jù):例如清理空格、格式化時間等,提前處理好數(shù)據(jù)再進入驗證流程。
  • 自定義錯誤消息和屬性名稱:通過messages()attributes()方法可以讓錯誤提示更友好。

舉個例子:

 public function messages()
{
    return [
        'title.required' => '標(biāo)題不能為空',
        'content.min' => '內(nèi)容不能少於:min 個字',
    ];
}

public function attributes()
{
    return [
        'title' => '文章標(biāo)題',
        'content' => '文章內(nèi)容',
    ];
}

最後一點小技巧

如果你在一個控制器方法中使用了多個Form Request,注意它們都會依次執(zhí)行驗證和授權(quán)。也就是說,只要其中一個失敗,就不會繼續(xù)往下執(zhí)行。

另外,F(xiàn)orm Request 類本身也可以注入依賴,比如數(shù)據(jù)庫服務(wù)或其他幫助類,方便你在驗證或授權(quán)時做一些更複雜的判斷。

基本上就這些。合理使用Form Request 可以讓你的控制器更乾淨(jìng),也讓驗證和授權(quán)邏輯更容易維護。

以上是使用Laravel表單驗證和授權(quán)請求的詳細內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

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

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

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

Laravel的政策是什麼,如何使用? Laravel的政策是什麼,如何使用? Jun 21, 2025 am 12:21 AM

InLaravel,policiesorganizeauthorizationlogicformodelactions.1.Policiesareclasseswithmethodslikeview,create,update,anddeletethatreturntrueorfalsebasedonuserpermissions.2.Toregisterapolicy,mapthemodeltoitspolicyinthe$policiesarrayofAuthServiceProvider.

Laravel中的路線是什麼?如何定義? Laravel中的路線是什麼?如何定義? Jun 12, 2025 pm 08:21 PM

在Laravel中,路由是應(yīng)用程序的入口點,用於定義客戶端請求特定URI時的響應(yīng)邏輯。路由將URL映射到對應(yīng)的處理代碼,通常包含HTTP方法、URI和動作(閉包或控制器方法)。 1.路由定義基本結(jié)構(gòu):使用Route::verb('/uri',action)的方式綁定請求;2.支持多種HTTP動詞如GET、POST、PUT等;3.可通過{param}定義動態(tài)參數(shù)並傳遞數(shù)據(jù);4.路由可命名以便生成URL或重定向;5.使用分組功能統(tǒng)一添加前綴、中間件等共享設(shè)置;6.路由文件按用途分為web.php、ap

我如何在Laravel運行播種機? (PHP Artisan DB:種子) 我如何在Laravel運行播種機? (PHP Artisan DB:種子) Jun 12, 2025 pm 06:01 PM

Thephpartisandb:seedcommandinLaravelisusedtopopulatethedatabasewithtestordefaultdata.1.Itexecutestherun()methodinseederclasseslocatedin/database/seeders.2.Developerscanrunallseeders,aspecificseederusing--class,ortruncatetablesbeforeseedingwith--trunc

我如何在Laravel進行測試? (PHP手工測試) 我如何在Laravel進行測試? (PHP手工測試) Jun 13, 2025 am 12:02 AM

ToruntestsinLaraveleffectively,usethephpartisantestcommandwhichsimplifiesPHPUnitusage.1.Setupa.env.testingfileandconfigurephpunit.xmltouseatestdatabaselikeSQLite.2.Generatetestfilesusingphpartisanmake:test,using--unitforunittests.3.Writetestswithmeth

Laravel中工匠命令行工具的目的是什麼? Laravel中工匠命令行工具的目的是什麼? Jun 13, 2025 am 11:17 AM

Artisan是Laravel的命令行工具,用于提升開發(fā)效率。其核心作用包括:1.生成代碼結(jié)構(gòu),如控制器、模型等,通過make:controller等命令自動創(chuàng)建文件;2.管理數(shù)據(jù)庫遷移與填充,使用migrate運行遷移,db:seed填充數(shù)據(jù);3.支持自定義命令,如make:command創(chuàng)建命令類實現(xiàn)業(yè)務(wù)邏輯封裝;4.提供調(diào)試與環(huán)境管理功能,如key:generate生成密鑰,serve啟動開發(fā)服務(wù)器。熟練使用Artisan可顯著提高Laravel開發(fā)效率。

Laravel中的控制器是什麼,他們的目的是什麼? Laravel中的控制器是什麼,他們的目的是什麼? Jun 20, 2025 am 12:31 AM

控制器在Laravel中的主要作用是處理HTTP請求並返迴響應(yīng),以保持代碼的整潔和可維護性。通過將相關(guān)請求邏輯集中到一個類中,控制器使路由文件更簡潔,例如將用戶資料展示、編輯和刪除等操作分別放在UserController的不同方法中。創(chuàng)建控制器可通過Artisan命令phpartisanmake:controllerUserController實現(xiàn),而資源控制器則使用--resource選項生成,涵蓋標(biāo)準(zhǔn)CRUD操作的方法。接著需在路由中綁定控制器,如Route::get('/user/{id

如何啟動Laravel開發(fā)服務(wù)器? (PHP手工藝品) 如何啟動Laravel開發(fā)服務(wù)器? (PHP手工藝品) Jun 12, 2025 pm 07:33 PM

要啟動Laravel開發(fā)服務(wù)器,請使用命令phpartisanserve,默認(rèn)在http://127.0.0.1:8000提供服務(wù)。 1.確保終端位於包含artisan文件的項目根目錄,若不在正確路徑則使用cdyour-project-folder切換;2.運行命令並檢查錯誤,如PHP未安裝、端口被佔用或文件權(quán)限問題,可指定不同端口如phpartisanserve--port=8080;3.在瀏覽器訪問http://127.0.0.1:8000查看應(yīng)用首頁,若無法加載請確認(rèn)端口號、防火牆設(shè)置或嘗試

如何使用Laravel的驗證系統(tǒng)來驗證形式數(shù)據(jù)? 如何使用Laravel的驗證系統(tǒng)來驗證形式數(shù)據(jù)? Jun 22, 2025 pm 04:09 PM

Laravelprovidesrobusttoolsforvalidatingformdata.1.Basicvalidationcanbedoneusingthevalidate()methodincontrollers,ensuringfieldsmeetcriterialikerequired,maxlength,oruniquevalues.2.Forcomplexscenarios,formrequestsencapsulatevalidationlogicintodedicatedc

See all articles