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

首頁 后端開發(fā) php教程 Laravel快速提示:模型路線綁定

Laravel快速提示:模型路線綁定

Feb 10, 2025 am 11:35 AM

Laravel路由組件:簡化高效的路由管理

本文探討Laravel強大的路由組件,它提供簡潔高效的路由管理方式,支持簡潔的URL、參數(shù)、分組、命名以及路由組的事件保護等特性。其路由模型綁定功能通過類型提示模型名稱而非ID參數(shù),簡化了重復性任務的處理。

Laravel Quick Tip: Model Route Binding

核心要點:

  • Laravel的路由組件提供簡單高效的路由管理方式,支持簡潔URL、參數(shù)、分組、命名以及事件保護路由組等功能。路由模型綁定功能通過類型提示模型名稱而非ID參數(shù),簡化了重復性任務處理。
  • Laravel的路由模型綁定會自動使用ID參數(shù)解析模型,如果模型不存在則拋出異常。App\Exceptions\Handler@render方法負責將異常轉(zhuǎn)換為HTTP響應,可用于處理ModelNotFoundException并重定向到404頁面。
  • Laravel允許自定義路由模型綁定,例如重寫父模型類的getRouteKeyName方法來使用不同的屬性名稱,比如UUID。這有助于避免將內(nèi)部ID暴露給最終用戶。

示例:管理后臺類別

假設數(shù)據(jù)庫中有一系列類別,管理員可在后臺管理這些類別。路由文件如下:

Route::group(['namespace' => 'Admin', 'prefix' => 'admin', 'middleware' => 'admin'], function () {
    Route::resource('categories', 'CategoriesController');
});

CategoriesController類包含七個資源方法。在edit操作中,需要檢查待編輯的類別是否存在于數(shù)據(jù)庫中,否則返回錯誤消息并重定向:

public function edit($id)
{
    $category = Category::find($id);
    if (!$category) {
        return redirect()->route('admin.categories.index')->withErrors([trans('errors.category_not_found')]);
    }

    // ...
}

路由模型綁定

這是常規(guī)做法,但Laravel提供了一種更優(yōu)化的方式——路由模型綁定。只需類型提示模型名稱即可,無需ID參數(shù)。

可用路由列表如下:

<code>+--------+-----------+------------------------------------+------------------------------------+----------------------------------------------------------------------+-----------------+
| Domain | Method    | URI                                | Name                               | Action                                                               | Middleware      |
+--------+-----------+------------------------------------+------------------------------------+----------------------------------------------------------------------+-----------------+
|        | GET|HEAD  | admin/categories                   | admin.categories.index             | App\Http\Controllers\Admin\CategoriesController@index                | web,admin       |
|        | POST      | admin/categories                   | admin.categories.store             | App\Http\Controllers\Admin\CategoriesController@store                | web,admin       |
|        | GET|HEAD  | admin/categories/create            | admin.categories.create            | App\Http\Controllers\Admin\CategoriesController@create               | web,admin       |
|        | GET|HEAD  | admin/categories/{categories}      | admin.categories.show              | App\Http\Controllers\Admin\CategoriesController@show                 | web,admin       |
|        | PUT|PATCH | admin/categories/{categories}      | admin.categories.update            | App\Http\Controllers\Admin\CategoriesController@update               | web,admin       |
|        | DELETE    | admin/categories/{categories}      | admin.categories.destroy           | App\Http\Controllers\Admin\CategoriesController@destroy              | web,admin       |
|        | GET|HEAD  | admin/categories/{categories}/edit | admin.categories.edit              | App\Http\Controllers\Admin\CategoriesController@edit                 | web,admin       |</code>

路由參數(shù)為 {categories},可根據(jù)需要修改。Laravel提供了一個修改它的選項:

Route::resource('categories', 'CategoriesController', [
    'parameters' => 'singular',
]);

修改后的路由:

<code>+--------+-----------+------------------------------------+------------------------------------+----------------------------------------------------------------------+-----------------+
| Domain | Method    | URI                                | Name                               | Action                                                               | Middleware      |
+--------+-----------+------------------------------------+------------------------------------+----------------------------------------------------------------------+-----------------+
|        | GET|HEAD  | admin/categories                   | admin.categories.index             | App\Http\Controllers\Admin\CategoriesController@index                | web,admin       |
|        | POST      | admin/categories                   | admin.categories.store             | App\Http\Controllers\Admin\CategoriesController@store                | web,admin       |
|        | GET|HEAD  | admin/categories/create            | admin.categories.create            | App\Http\Controllers\Admin\CategoriesController@create               | web,admin       |
|        | GET|HEAD  | admin/categories/{category}        | admin.categories.show              | App\Http\Controllers\Admin\CategoriesController@show                 | web,admin       |
|        | PUT|PATCH | admin/categories/{category}        | admin.categories.update            | App\Http\Controllers\Admin\CategoriesController@update               | web,admin       |
|        | DELETE    | admin/categories/{category}        | admin.categories.destroy           | App\Http\Controllers\Admin\CategoriesController@destroy              | web,admin       |
|        | GET|HEAD  | admin/categories/{category}/edit   | admin.categories.edit              | App\Http\Controllers\Admin\CategoriesController@edit                 | web,admin       |</code>

注意: Laravel 5.3 默認使用單數(shù)形式。

public function edit(Category $category)
{
    return view('admin.categories.edit', [
        'category'      => $category
    ]);
}

現(xiàn)在,Laravel將自動使用ID參數(shù)解析類別,如果模型不存在則拋出異常。

注意: 除非參數(shù)有默認值,否則它使用 findOrFail Eloquent 方法來解析參數(shù)。

異常處理

App\Exceptions\Handler@render 方法負責將異常轉(zhuǎn)換為HTTP響應。我們將使用它來處理 ModelNotFoundException 并重定向到404頁面。

該方法具有 requestexception 參數(shù),可用于確定要執(zhí)行的操作。

Route::group(['namespace' => 'Admin', 'prefix' => 'admin', 'middleware' => 'admin'], function () {
    Route::resource('categories', 'CategoriesController');
});

我們測試拋出的異常是否為 ModelNotFoundException 的實例。我們還可以測試模型名稱以顯示正確的錯誤消息。為了避免為所有模型添加多個 if 測試,我們可以創(chuàng)建一個索引消息數(shù)組,并使用模型類名來提取正確的消息。

參數(shù)解析

Laravel 使用名稱和類型提示來解析路由參數(shù)。如果參數(shù)類型是模型,則它嘗試使用 ID 在數(shù)據(jù)庫中查找記錄,如果找不到記錄則失敗。

自定義路由鍵

為避免將內(nèi)部ID暴露給最終用戶,通常使用UUID。但由于Laravel使用表主鍵來解析綁定參數(shù),因此始終會拋出錯誤!

為此,Laravel允許我們重寫父模型類的getRouteKeyName方法。該方法應返回屬性名稱,在本例中為UUID。

public function edit($id)
{
    $category = Category::find($id);
    if (!$category) {
        return redirect()->route('admin.categories.index')->withErrors([trans('errors.category_not_found')]);
    }

    // ...
}

現(xiàn)在,如果我們嘗試使用UUID編輯特定類別,它應該按預期工作,例如:http://www.miracleart.cn/link/604541b9b9f266538ed001ea49fcc956。

Laravel Quick Tip: Model Route Binding

Laravel路由模型綁定的常見問題解答 (這部分內(nèi)容已在原文中詳細解答,此處不再贅述)

希望以上內(nèi)容對您有所幫助!

以上是Laravel快速提示:模型路線綁定的詳細內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

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

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應用程序,用于創(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)

我如何了解最新的PHP開發(fā)和最佳實踐? 我如何了解最新的PHP開發(fā)和最佳實踐? Jun 23, 2025 am 12:56 AM

TostaycurrentwithPHPdevelopmentsandbestpractices,followkeynewssourceslikePHP.netandPHPWeekly,engagewithcommunitiesonforumsandconferences,keeptoolingupdatedandgraduallyadoptnewfeatures,andreadorcontributetoopensourceprojects.First,followreliablesource

什么是PHP,為什么它用于Web開發(fā)? 什么是PHP,為什么它用于Web開發(fā)? Jun 23, 2025 am 12:55 AM

PHPbecamepopularforwebdevelopmentduetoitseaseoflearning,seamlessintegrationwithHTML,widespreadhostingsupport,andalargeecosystemincludingframeworkslikeLaravelandCMSplatformslikeWordPress.Itexcelsinhandlingformsubmissions,managingusersessions,interacti

如何設置PHP時區(qū)? 如何設置PHP時區(qū)? Jun 25, 2025 am 01:00 AM

tosetTherightTimeZoneInphp,restate_default_timezone_set()functionAtthestArtofyourscriptWithavalIdidentIdentifiersuchas'america/new_york'.1.usedate_default_default_timezone_set_set()

我如何驗證PHP中的用戶輸入以確保其符合某些標準? 我如何驗證PHP中的用戶輸入以確保其符合某些標準? Jun 22, 2025 am 01:00 AM

TovalidateuserinputinPHP,usebuilt-invalidationfunctionslikefilter_var()andfilter_input(),applyregularexpressionsforcustomformatssuchasusernamesorphonenumbers,checkdatatypesfornumericvalueslikeageorprice,setlengthlimitsandtrimwhitespacetopreventlayout

編寫清潔和可維護的PHP代碼的最佳實踐是什么? 編寫清潔和可維護的PHP代碼的最佳實踐是什么? Jun 24, 2025 am 12:53 AM

寫干凈、易維護的PHP代碼關(guān)鍵在于清晰命名、遵循標準、合理結(jié)構(gòu)、善用注釋和可測試性。1.使用明確的變量、函數(shù)和類名,如$userData和calculateTotalPrice();2.遵循PSR-12標準統(tǒng)一代碼風格;3.按職責拆分代碼結(jié)構(gòu),使用MVC或Laravel式目錄組織;4.避免面條式代碼,將邏輯拆分為單一職責的小函數(shù);5.在關(guān)鍵處添加注釋并撰寫接口文檔,明確參數(shù)、返回值和異常;6.提高可測試性,采用依賴注入、減少全局狀態(tài)和靜態(tài)方法。這些做法提升代碼質(zhì)量、協(xié)作效率和后期維護便利性。

什么是php(serialize(),Unserialize())中的數(shù)據(jù)序列化? 什么是php(serialize(),Unserialize())中的數(shù)據(jù)序列化? Jun 22, 2025 am 01:03 AM

thephpfunctionserize()andunSerialize()redustoconvertComplexdatStructDestoresToroStoroStoroSandaBackagagain.1.Serialize()

如何將PHP代碼嵌入HTML文件中? 如何將PHP代碼嵌入HTML文件中? Jun 22, 2025 am 01:00 AM

可以將PHP代碼嵌入HTML文件中,但需確保文件以.php為擴展名,以便服務器能正確解析。使用標準的標簽包裹PHP代碼,可在HTML中任意位置插入動態(tài)內(nèi)容。此外,可在同一文件中多次切換PHP與HTML,實現(xiàn)條件渲染等動態(tài)功能。務必注意服務器配置及語法正確性,避免因短標簽、引號錯誤或遺漏結(jié)束標簽導致問題。

如何使用PHP執(zhí)行SQL查詢? 如何使用PHP執(zhí)行SQL查詢? Jun 24, 2025 am 12:54 AM

Yes,youcanrunSQLqueriesusingPHP,andtheprocessinvolveschoosingadatabaseextension,connectingtothedatabase,executingqueriessafely,andclosingconnectionswhendone.Todothis,firstchoosebetweenMySQLiorPDO,withPDObeingmoreflexibleduetosupportingmultipledatabas

See all articles