iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 29
1

前言

Laravel:Route Wildcards - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天

之前有分享過Laravel wildcards的使用,除了可以最簡單的傳值,也可以透過id取得整個model。
像這樣:

Route('/users/{user}'[App\Http\Controllers\UsersController, 'show']);

只要wildcard那是id,且controller的方法有定義輸入參數是對應model(下面例子是User),這就可以取得整個model。

public function show(User $user) //這邊要定義輸入是你要的model,這邊是User
{
	return $user // 會是一個user model
}

可以不用id取得model

這幾天學到可以不用透過id,而是透過其他欄位取得model的方法。
這個方法很簡單,就是透過修改物件導向父類別中的一個方法(function)就行了!
以User為例,在User.php中新增以下方法,並回傳想要透過哪個欄位取得model,例如使用name

public function getRouteKeyName()
    {
        return 'name';
    }

這樣就完成了!

現在來測試看看,假設User的第一筆資料(id:1)的名字是Amy,
如果原本是靠id取得整個model,像這樣:https://example/users/1
可以變成輸入name取得model,像這樣:https://example/users/AmyChen

比較

  • 取得輸入的

    public function foo($bar)
    {
    	return $bar
    }
    
  • 取得整個model(預設輸入id)

    public function foo(Model $bar)
    {
    	return $bar
    }
    
  • 取得整個model(自定義要依什麼欄位找)

    public function foo(Model $bar)
    {
    	return $bar
    }
    

    跟上面一樣,但要model裡要複寫掉原本的設定。

    public function getRouteKeyName()
    {
        return 'desiredColumnName';
    }
    

上一篇
PHP:isset()小知識
下一篇
學習網頁後端3個月
系列文
網頁後端的30件小事30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言