代码之家  ›  专栏  ›  技术社区  ›  Puggan Se

如何在Laravel中将路径路由到404

  •  0
  • Puggan Se  · 技术社区  · 8 年前

    当前,有一个ImageController,可以在 /media/upload/ 还有一个IndexController,它有一个missingMethod(),用于捕获其他URL。

    但我不想让IndexController捕捉到 /media/ -URL

    我所拥有的:

    <?php
    Route::get('media/upload/{userId}/{productId}/view/{size}/{filename}',
        'ImageController@anyView');
    Route::controllers(['/' => 'IndexController']);
    

    尝试使用以下方式添加404路由:

    <?php
    Route::get('media/{path?}/{path2?}/{path3?}/{path4?}/{path5?}/{path6?}',
        function() {throw new NotFoundHttpException();});
    

    但是,如果url的长度超过8’/,则IndexController会捕捉该url。

    我怎样才能写出一条包罗万象的路线 media/ -URL(ImageController使用的URL除外)?

    2 回复  |  直到 8 年前
        1
  •  1
  •   apokryfos    8 年前

    基本上如果你想的话 media* 要被抓到,请执行以下操作:

    Route::get('media/upload/{userId}/{productId}/view/{size}/{filename}',
    'ImageController@anyView');
     Route::get("media/{param?}", function ($param) {
           throw new NotFoundHttpException();
     })->where("param",".*")
     Route::controllers(['/' => 'IndexController']);
    

    这应该抓住媒体之后的一切,并把它放到 $param 在路线处理程序中。理想情况下,与第一条路径匹配的任何内容都不会被第二条路径捕获,然后与/media*匹配的任何内容都不会被索引捕获。

    然而,顺序很重要。

        2
  •  0
  •   Kushagra Saxena    8 年前

    首先,您必须在api中的另一个路由之上编写要在ImageController中捕获的路由。php文件。现在,最好的方法是将这两条路由分组到一个自定义中间件中,您可以使用命令创建该中间件

    php artisan make:middleware MyMiddleware

    现在使用这个中间件来检查 / 并根据您的要求传递请求或引发异常。