如何在Laravel中使用數據傳輸對象(DTO)?
Laravel中的DTO用於組織,驗證和傳輸應用程序層之間的數據,從而提高可預測性和可檢驗性。 2。通過作曲家安裝推薦的Spatie/laravel-data軟件包,以進行魯棒的DTO功能。 3。使用工匠命令製造:數據,用類型提示和可選嵌套定義數據結構。 4。通過手動實例化在控制器中使用驗證的請求數據或通過實現從request實現自動綁定的DTO。 5。使用fercast和mapName之類的屬性應用鑄造和命名映射以轉換和標準化數據。 6. DTO可以輕鬆地轉換為API響應的數組或JSON,從而增強前端兼容性。 7。可選地將DTO與API資源集成,或直接使用FromModel從雄辯的模型中繪製它們,從而確保整個應用程序上的一致數據格式。始終保持DTO,不使用業務邏輯,使用清晰的命名約定,並利用類型的安全性來維持清潔,可擴展的代碼。
使用Laravel中的數據傳輸對象(DTO)可以幫助您在應用程序的不同層之間組織,驗證和傳輸數據,例如從請求到服務或從服務到前端。雖然Laravel不包括DTO,但您通常可以在Spatie/Data-Transfer-Object或LiveWire-UI/Slim-DTO的第三方軟件包借助下,使用PHP類有效地實現它們。

這是有效地使用Laravel中DTO的方法:
✅1。什麼是DTO,為什麼使用它?
數據傳輸對象(DTO)是用於攜帶數據的簡單PHP對象。當:

- 您想在服務之間傳遞結構化數據。
- 您需要從HTTP請求中標準化輸入。
- 您正在使用API,並且需要一致的數據格式。
- 您想執行類型的安全性和驗證。
DTO並沒有傳遞原始數組或請求對象,而是使您的代碼更容易預測和更易於測試。
✅2。安裝DTO軟件包(推薦:Spatie/Laravel-Data)
雖然您可以創建普通的PHP類作為DTOS,但使用Spatie/Laravel-Data ( spatie/data-transfer-object
的現代繼任者)是Laravel中最強大的方法。

通過作曲家安裝它:
作曲家需要Spatie/Laravel-Data
發布配置(可選):
PHP工匠供應商:發布-provider =“ Spatie \ Laraveldata \ LaraveldataServiceProvider”
✅3。創建DTO
假設您正在處理用戶創建。運行工匠命令:
PHP工匠製造:數據用戶
這創建了類似的課程:
// app/dtos/userdto.php 名稱空間應用\ dtos; 使用spatie \ laraveldata \ data; 班級用戶擴展數據 { 公共功能__Construct( 公共字符串$名稱, 公共字符串$電子郵件, public? string $ phone = null, ){} }
您還可以使用數組語法或嵌套數據:
公共功能__Construct( 公共字符串$名稱, 公共字符串$電子郵件, 公共地址$地址, 公共陣列$角色, )
✅4。在請求或控制器中使用DTO
選項A:從表格請求中
//在您的控制器中 使用app \ dtos \ userdto; 使用照明\ http \ request; 公共功能商店(請求$請求) { $ dto = userdto :: from($ request-> varicated()); //通過服務 uservice :: create($ dto); 返迴響應() - > json(['message'=>'用戶創建']); }
或者更好,請與FromRequest
使用自動綁定:
//在控制器方法中 公共功能商店(userdto $ dto) { uservice :: create($ dto); 返迴響應() - > json($ dto); }
⚠️僅在您在DTO上實現
Spatie\LaravelData\FromRequest
或使用正確的表單請求映射時才能起作用。
選項B:使用表格請求DTO
// app/http/requests/storeuserrequest.php 公共功能規則() { 返回 [ 'name'=>'必需|字符串| max:255', '電子郵件'=>'必需|電子郵件', 'phone'=>'無效|字符串', ]; } //在控制器中 公共功能商店(StoreUserRequest $請求) { $ dto = userdto :: from($ request-> varicated()); //處理邏輯 }
✅5。添加鑄件和自定義映射
使用數據變壓器和腳輪格式輸入:
使用spatie \ laraveldata \ attributes \ mapname; 使用spatie \ laraveldata \屬性\ withcast; 使用spatie \ laraveldata \ casts \ dateTimeInterfaceCast; 班級用戶擴展數據 { 公共功能__Construct( 公共字符串$名稱, 公共字符串$電子郵件, #[withcast(dateTimeInterfaceCast :: class,格式:'ym-d')] public? \ dateTime Interface $ dob = null, #[mapname('phone_number')] public? string $ phone = null, ){} }
現在,它將phone_number
從json映射到phone
,並格式化日期。
✅6。將DTO轉換為數組/JSON
DTO很容易序列化:
$ dto = userdto ::來自[[[ 'name'=>'John Doe', '電子郵件'=>'john@example.com' ); 返回$ dto-> toarray(); //或自動響應: 返迴響應() - > json($ dto);
✅7。在API資源中使用DTO(可選)
您可以使用DTO與API資源一起使用:
返回新的jsonresponse(userdto :: from($ user));
或將雄辯的模型映射到DTO:
userdto ::來自[[ 'name'=> $ user->名稱, '電子郵件'=> $ user->電子郵件, );
您甚至可以使用Spatie\LaravelData\FromModel
從模型中自動映射DTO。
✅摘要:最佳實踐
- ✅使用spatie/laravel-data進行功能強大,乾淨的DTO。
- ✅名稱dtos:
UserDTO
,CreateUserDTO
,UserProfileDTO
。 - ✅在控制器,服務和API中使用它們來標準化數據流。
- ✅利用類型提示,默認值和鑄件。
- ✅避免將業務邏輯放入DTO中 - 它們應該是數據容器。
使用DTO可以使您的Laravel應用程序保持清潔,類型安全且易於維護,尤其是隨著它的增長。一旦您開始將它們用於表單,API和服務層,您就會想知道沒有它們的生活。
基本上,這是一個很小的設置,可以在代碼質量方面取得重大勝利。
以上是如何在Laravel中使用數據傳輸對象(DTO)?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undress AI Tool
免費脫衣圖片

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

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

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

LaravelSanctum適合簡單、輕量的API認證,如SPA或移動應用,而Passport適用於需要完整OAuth2功能的場景。 1.Sanctum提供基於令牌的認證,適合第一方客戶端;2.Passport支持授權碼、客戶端憑證等複雜流程,適合第三方開發者接入;3.Sanctum安裝配置更簡單,維護成本低;4.Passport功能全面但配置複雜,適合需要精細權限控制的平台。選擇時應根據項目需求判斷是否需要OAuth2特性。

在Laravel測試中管理數據庫狀態的方法包括使用RefreshDatabase、選擇性播種數據、謹慎使用事務和必要時手動清理。 1.使用RefreshDatabasetrait自動遷移數據庫結構,確保每次測試都基於乾淨的數據庫;2.通過調用特定種子填充必要數據,結合模型工廠生成動態數據;3.使用DatabaseTransactionstrait回滾測試更改,但需注意其局限性;4.在無法自動清理時,手動截斷表或重新播種數據庫。這些方法根據測試類型和環境靈活選用,以保證測試的可靠性和效率。

在Laravel中生成命名路由的URL最常用方法是使用route()輔助函數,它可根據路由名稱自動匹配路徑並處理參數綁定。 1.在控制器或視圖中傳入路由名稱和參數,如route('user.profile',['id'=>1]);2.多參數時也只需傳數組,順序不影響匹配,如route('user.post.show',['id'=>1,'postId'=>10]);3.在Blade模板中可直接嵌入鏈接,如查看資料;4.可選參數未提供時不顯示,如route('user.post',

Laravel的配置緩存通過合併所有配置文件為一個緩存文件來提升性能。在生產環境中啟用配置緩存可減少每次請求時的I/O操作和文件解析,從而加快配置加載速度;1.應在部署應用、配置穩定且無需頻繁更改時啟用;2.啟用後修改配置需重新運行phpartisanconfig:cache才會生效;3.避免在配置文件中使用依賴運行時條件的動態邏輯或閉包;4.排查問題時應先清除緩存、檢查.env變量並重新緩存。

在Laravel中處理HTTP請求和響應的核心在於掌握請求數據獲取、響應返回和文件上傳。 1.接收請求數據可通過類型提示注入Request實例並使用input()或魔術方法獲取字段,結合validate()或表單請求類進行驗證;2.返迴響應支持字符串、視圖、JSON、帶狀態碼和頭部的響應及重定向操作;3.處理文件上傳時需使用file()方法並結合store()存儲文件,上傳前應驗證文件類型和大小,存儲路徑可保存至數據庫。

在Laravel中進行請求驗證有兩種主要方法:控制器驗證和表單請求類。 1.控制器中使用validate()方法適合簡單場景,直接傳入規則並自動返回錯誤;2.使用FormRequest類適用於復雜或複用場景,通過Artisan創建類並在rules()中定義規則,實現代碼解耦與復用;3.可通過messages()自定義錯誤提示,提升用戶體驗;4.通過attributes()定義字段別名,使錯誤信息更友好;兩種方式各有優劣,應根據項目需求選擇合適方案。

LaravelBreeze和Jetstream的主要區別在於定位和功能。 1.核心定位上,Breeze是輕量級認證腳手架,適合小型項目或自定義前端需求;Jetstream提供完整用戶系統,包含團隊管理、個人資料設置、API支持及雙因素驗證等功能,適合中大型應用。 2.前端技術棧方面,Breeze默認使用Blade Tailwind,偏向傳統服務端渲染;Jetstream支持Livewire或Inertia.js(結合Vue/React),更適合現代SPA架構。 3.安裝與定制上,Breeze更簡單易用

Laravel的EloquentScopes是封裝常用查詢邏輯的工具,分為本地作用域和全局作用域。 1.本地作用域以scope開頭的方法定義,需顯式調用,如Post::published();2.全局作用域自動應用於所有查詢,常用於軟刪除或多租戶系統,需實現Scope接口並在模型中註冊;3.作用域可帶參數,如按年份或月份篩選文章,調用時傳入對應參數;4.使用時注意命名規範、鍊式調用、臨時禁用及組合擴展,提升代碼清晰度與復用性。
