【问题标题】:Laravel 5.4 - How to route with wildcard?Laravel 5.4 - 如何使用通配符路由?
【发布时间】:2020-05-07 05:47:47
【问题描述】:

经过一番研究和研究,似乎 Route::when()Route::filter() 在 Laravel 5+ 中已被弃用。我需要能够将所有以members 开头的 URI 路由到同一个控制器。例如:

Route::get('members/home', 'MembersController');
Route::get('members/view/all', 'MembersController');
Route::get('members/any/possible/route', 'MembersController');

我不会知道以成员开头的所有可能路线,因为它们将存储在我的数据库中。是否有与 Laravel 4.2 相同的通配符可以在 5.4 中使用?

这个想法是让任何以某些前缀开头的路由转到其指定的控制器,然后控制器将比较整个 URI 字符串并检索 db 中具有匹配 slug 的页面。

【问题讨论】:

    标签: php laravel laravel-5


    【解决方案1】:

    您可以使用允许任何值的路由参数来执行此操作。例如。 (.*)。然后,您需要处理来自单个控制器操作的所有请求。

    Route::get('members/{action}', 'MemberController@all')->where('action', '(.*)');
    

    为了更进一步,如果您不知道您的请求都是GET 请求,您可以使用:any 方法类型。

    Route::any('members/{action}', 'MemberController@all')->where('action', '(.*));
    

    【讨论】:

    • 太棒了!这正是我所需要的。非常感谢!
    • 兄弟出现错误Route::resource('questions', 'QuestionController')->parameters(['questions' => 'question_slug'])->where(['slug' => '^[A-Za-z0-9]+(?:-[A-Za-z0-9]+)*$']);
    • @fubar 你能纠正你在这个答案中的第一个例子吗,它应该是 Route::get('members/{action}', 'MemberController@all')->where('action', '(.*)')
    【解决方案2】:
    Route::get('/members/{section}', 'MembersController@index' )
           ->where(['section' => '.*']);
    

    或者更好的是,您可以使用组路线。它更快并优化了您的应用。

    Route::prefix('members')->group(function () {
        Route::get('{section}', 'MembersController@index' )
            ->where(['section' => '.*']);
    });
    

    【讨论】:

      猜你喜欢
      • 2017-07-17
      • 1970-01-01
      • 1970-01-01
      • 2015-10-12
      • 2014-06-29
      • 2017-06-29
      • 1970-01-01
      • 1970-01-01
      • 2017-10-12
      相关资源
      最近更新 更多