2018/09/06

[Laravel] Form Request

Form Request 建立時預設會產生

// 授權可否使用此Request
public function authorize();

// 驗證規則
public function rules();


另外還有兩個方法可以設定

// 錯誤文字的回應格式,與 lang 下的 validation 合併
public function messages() : array;

// 欄位的顯示名稱,與 lang 下的 validation.attributes 合併
public function attributes() : array;


在 Controller 可以直接使用 validated 拿到 rules 定義的資料

public function update(FormRequest $request)
{
$data = $request->validated();
}


以上的設定方式與以下等效

$data = $request->validate($rules, $messages, $attributes);


不過這樣會讓 Controller 變大,而且沒遵守 SRP

ps.
illuminate\Http\Request::validate 這個 method 是 另外用 Macro 加進去的,
api是找不到的。

SourceCode:
https://github.com/laravel/framework/blob/5.5/src/Illuminate/Foundation/Providers/FoundationServiceProvider.php#L36

2018/09/05

[Laravel] 利用 intended 跳回之前的頁面

有時候需要記錄網址,做完某些事情之後再跳回去。

例如:訪問一個需要登入的頁面,先跳去登入,登入成功後在跳回。

Laravel 原生就有一個

redirect()->intended();

可以做到這件事情

不過你需要記錄你從哪跳來的

session()->put('url.intended', url()->previous());


intended 裡面可以傳入失效的備援網址

redirect()->intended('/');

這樣即使 session.url.intended 失效也會跳回首頁

2018/08/10

Naming convention for Eloquent relation method

Laravel Relation Function Name 如果要使用兩個字時,需要注意命名規則。

習慣上我會使用 camelCase 命名:如

public function mobilePhones () {
    return $this->hasMany(MobilePhone::class);
}

但是直接使用 $user->mobilePhones 去拿資料時,
Eloquent 是不會到 db 抓資料的,
只會給回傳空的 Collection


使用 $user->mobile_phones 會回傳 null

解決方法是採用 snake_case 命名

public function mobile_phones () {
    return $this->hasMany(MobilePhone::class);
}

就可以使用 $user->mobile_phones 抓到資料了

2018/05/20

建置 Gitlab Ci/CD :: CD - 使用 Deployer

Deployer 是一套用途很廣泛的PHP部屬工具,
也有另一套 Laravel 的部屬工具 Ennoy
考量可能有其他的專案可能也需要部屬,我選擇 Deployer 來部屬。

建置 Gitlab Ci/CD :: CD - 準備 QA/Production Server

建立好CI之後,可以接著建置CD。

CD會使用 QA/Prod. Server上的一個使用者 (通常叫他 deployer)
透過 SSH Key 的驗證,直接操作遠端主機進行軟體的部屬。

所以 Server 需要安裝 SSH Server, 跟可以被外接連接的網路。
(可以想作 Gitlab會 SSH 到 Server)