首頁 >php框架 >Laravel >分享一個Laravel建議寫法指南

分享一個Laravel建議寫法指南

藏色散人
藏色散人轉載
2021-05-07 09:12:411765瀏覽

以下由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中文網其他相關文章!

陳述:
本文轉載於:learnku.com。如有侵權,請聯絡admin@php.cn刪除