由於我在使用 Yii 的過程中,並沒有遇到太多雷,因此這篇文章不會是新的系列,而是作為 PHP 系列的補充,整理一些 Yii 的小知識與筆記。
取得使用者資訊
一般來說,我們(比較菜的時候)可能會透過使用者 ID 去查詢資料庫來獲取使用者資訊。然而實際上,我們可以直接使用 Yii::$app->user->identity
來取得當前使用者的資訊,並且可以透過加上 ->欄位名稱
來獲取特定欄位的資料。
toArray()
,否則只會得到 User
類別的物件,而不是陣列格式的資料。例如:Yii::info(json_encode(Yii::$app->user->identity->toArray()));
取得 IP
我們可以直接使用 Yii::app()->request->getUserHostAddress();
取得使用者的 IP 地址。
參數註解
在為函式的參數撰寫註解時,與其直接在參數旁邊加上註解,更推薦使用 PHPDoc 來標註,將註解寫在函式上方。這不僅是 PHPDoc 的標準寫法,還能讓大多數 IDE 正確解析類型資訊,提供更好的語法提示與型別檢查。
舉例來說:
/**
* 取得使用者資訊
*
* @param string $name 使用者名稱
* @param int $age 年齡
* @return array 回傳使用者資訊
*/
function getUserInfo(string $name, int $age): array {
return [
'name' => $name,
'age' => $age
];
}
預設的依賴注入
在 Yii 中,如果我們希望在獲取使用者資訊時,自動取得相關的資料(例如使用者登入時自動獲取他的訂單資訊),可以使用 singleton 來統一管理預設的依賴注入。這樣一來,就不需要在每個控制器中重複處理相同的依賴注入邏輯。
舉例來說:
$this->app->singleton(
LetterService::class,
function ($app) {
return new LogoPictureService(
$app->make(ProfileDao::class),
$app->make(FileApi::class),
$app->make(IndexQueue::class)
);
}
);
取得 Session
我們可以直接使用 Yii::$app->session;
的方式取得當前使用者的 Session 資料,並使用 get()
方法來取得特定的值或進行判斷。例如:
empty($session->get('update_time'))