【问题标题】:Intercepting and changing route-based input in Laravel?在 Laravel 中拦截和更改基于路由的输入?
【发布时间】:2015-01-02 03:36:09
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: php laravel laravel-4 laravel-routing


    【解决方案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' 
    ]);
    

    【讨论】:

    • 非常感谢您为我指出过滤器方向,我完全忽略了这一点。我以比您更清洁的方式做到了这一点,但使用了大多数相同的构建块。非常感谢!
    猜你喜欢
    • 2015-10-11
    • 1970-01-01
    • 2021-03-14
    • 2015-08-27
    • 2011-11-22
    • 1970-01-01
    • 2019-11-06
    • 2018-12-09
    • 2020-03-07
    相关资源
    最近更新 更多