下面由laravel教程欄目給大家分享一個laravel建議寫法指南,希望對需要的朋友有所幫助!
Laravel 優雅的框架,同時提供了大量靈活并且神奇的寫法。但越靈活,在一些方面可能會存在小問題。
以下列出 Laravel 不太建議的寫法,僅大家討論與參考。如果可能的話在評議區說出你的看法吧。
Request 問題
Request 參數可以通過動態屬性獲取,如以下寫法:
$name?=?$request->name;
該寫法非常不建議,原因是如果屬性名稱為 query 或者 content 之類原本類的屬性,就會產生非預期效果。除非你把所有該類的所以關鍵詞都記住(就算你記住所有的屬性,你也保證不了下個版本會不會加新的屬性),否則你早晚會遇到這個坑。比較不建議使用,建議使用如下方式:
//?可以用這種方式 $name?=?$request->input('name'); //?或用這種方式 $input?=?$request->all(); $name?=?$input['name'];
總結:不使用 request 動態屬性。
Model appends
class?User?extends?Model { ??protected?$appends?=?['is_adult']; ??public?function?getIsAdultAttribute() ??{ ??????return?$this->attribute['age']?>?18; ??} }
getXxxAttribute 是一個很用的特性,但如果 model 中自動 append 就會產生很多問題,如你在 select 的時候,沒有 age 字段,依然會幫你加上 append 的字段,這有時會帶來很多問題。建議不使用 $append 這個屬性。在需要的時候,在 controller 層加載這個屬性。
//?model class?User?extends?Model { ??public?function?getIsAdultAttribute() ??{ ??????return?$this->attribute['age']?>?18; ??} } //?controller $user?=?User::first(); $user->append('is_adult');
總結:不使用 model 的 appends。
Model 的動態屬性
//?第1種寫法 $user?=?User::first(); //????此動態屬性如果是表字段名稱是如?exists?等就會出問題。 $name?=?$user->name; //?第2種寫法更安全 $user?=?User::first()->toArray(); $name?=?$user['name'];
Model 在使用對象時也有動態屬性,也同樣會產生沖突問題 (一般不太可能觸發到),但數據表字段盡可能不出現下關鍵詞。(雖然第 2 種寫法更安全,但相信更多人更喜歡第一種寫法吧,我們避免數據庫字段如下關鍵詞就好了。我也喜歡用第 1 種寫法。)
//?/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php? exists, incrementing timestamps wasRecentlyCreated
本文會不定期更新,希望用 Laravel 的人一起分享你們的使用建議。