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

目錄
什么是 Form Request?
如何用 Form Request 做驗(yàn)證?
怎么在 Form Request 中做權(quán)限控制?
實(shí)際使用建議
最后一點(diǎn)小技巧
首頁(yè) php框架 Laravel 使用Laravel表單驗(yàn)證和授權(quán)請(qǐng)求

使用Laravel表單驗(yàn)證和授權(quán)請(qǐng)求

Jul 13, 2025 am 02:39 AM
laravel

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

Using Laravel Form Requests for validation and authorization

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

Using Laravel Form Requests for validation and authorization

什么是 Form Request?

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

Using Laravel Form Requests for validation and authorization

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

php artisan make:request StorePostRequest

生成的類(lèi)會(huì)放在 app/Http/Requests 目錄下(如果沒(méi)有這個(gè)目錄,Laravel 會(huì)自動(dòng)創(chuàng)建)。

Using Laravel Form Requests for validation and authorization

如何用 Form Request 做驗(yàn)證?

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

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

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

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

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

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

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

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

比如,只有管理員才能創(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),確保用戶(hù)有權(quán)限操作對(duì)應(yīng)模型。如果返回 false,Laravel 會(huì)自動(dòng)返回 403 響應(yīng)。

這樣就把權(quán)限判斷也集中到請(qǐng)求對(duì)象里了,而不是散落在各個(gè)控制器中。


實(shí)際使用建議

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

舉個(gè)例子:

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

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

最后一點(diǎn)小技巧

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

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

基本上就這些。合理使用 Form Request 可以讓你的控制器更干凈,也讓驗(yàn)證和授權(quán)邏輯更容易維護(hù)。

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

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

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線(xiàn)人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

熱門(mén)話(huà)題

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

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

Laravel中的路線(xiàn)是什么?如何定義? Laravel中的路線(xiàn)是什么?如何定義? Jun 12, 2025 pm 08:21 PM

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

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

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

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

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

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

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

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

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

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

See all articles