Laravel 建議寫法指南

Y90發表於2021-04-29

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。

本文會不定期更新,希望用Laravel的人一起分享你們的使用建議。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章