在Laravel中拦截和更改基于路线的输入?

时间:2014-11-05 19:46:45

标签: php laravel laravel-4 laravel-routing

所以我最近一直在使用Laravel,这很棒!但是我发现自己在这个问题上碰到了键盘。 我有这种模式:

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

我的很多API调用都需要这条路径。它应该做的是让消费者可以选择在通话结束时简单地附加/我,获取与他们相关的信息,这样就不必使用userId。我当然可以把这个登录放在控制器中,没问题,但我希望能够在“模式”中加入一些登录,这意味着如果使用这种模式,我可以查看userId“/ me”correspons去翻译它。我想这样做是为了避免在所有使用它的控制器中编写相同的代码来翻译“/ me”。

希望有人有一个聪明的解决方案! : - )

1 个答案:

答案 0 :(得分: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参数的名称。使用它的示例路由看起来像这样:

Route::get('/users/{id}', [
    'before' => 'route_filter_name', 
    'uses' => 'UserController@showUserInfo' 
]);