以下由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 的人一起分享你們的使用建議。
以上是分享一個Laravel建議寫法指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!