2014-11-05 24 views
1

所以我最近一直在使用Laravel,而且太棒了!但是我發現自己在我遇到的這個問題上對着鍵盤敲了敲頭。 我有這樣的模式:在Laravel中攔截並更改基於路由的輸入?

Route::pattern('id', '(\d*|(me))'); 

,並要求這條路線了很多我的API調用。它應該做的是讓消費者在通話結束時簡單地附加/我來獲得與他們有關的信息,所以不必使用userId。我當然可以將這個登錄名放在控制器中,沒問題,但我希望能夠在「模式」中進行一些登錄,這意味着如果使用這種模式,我可以檢查userId「/ me」的對應關係並翻譯它。我想這樣做,以避免編寫相同的代碼翻譯「/我」在所有控制器中使用它。

希望有人有一個聰明的解決方案! :-)

回答

1

您可以嘗試使用Route filter。像這樣的東西應該工作:

Route::filter('route_filter_name', 'F\Q\ClassName'); 

<?php namespace F\Q; 

class ClassName 
{ 
    /** 
    * @param Illuminate\Routing\Route 
    */ 
    public function filter($route) 
    { 
     $userId = $route->getParameter('id'); 
     if($userId == 'me' && ($user = Auth::user())) { 
      $route->setParameter('id', $user->id); 
     } 
    } 
} 

這是更具體的路由,而不是你的路由模式,因爲它取決於你給什麼名字,你想使用它的每個路由id參數的一個例子。使用它的路線如下所示:

+0

感謝大家指出我在過濾器方向,我完全忽略了這一點..我以比你更清潔的方式做到了這一點,但與大多數同一建築物塊。非常感謝! – Lozzano 2014-11-05 22:01:33