如何在Laravel中路径到404

时间:2017-11-28 10:55:50

标签: php laravel

Currenlty有一个ImageController,用于捕获/media/upload/下的路由和一个带有missingMethod()的IndexController,用于捕获其他URL。

但我不希望IndexController捕获/media/ - urls

我有什么:

<?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();});

但如果网址超过8&#39; /&#39;然后IndexController捕获URL。

如何编写捕获所有media/ - url的路由(ImageController使用的路由除外)?

2 个答案:

答案 0 :(得分:1)

基本上,如果您想要抓住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 *的任何东西都不会被索引捕获。

但顺序很重要。

答案 1 :(得分:0)

首先,您必须在api.php文件中编写要在ImageController上方捕获的路径。现在,执行此操作的最佳方法是将您可以使用命令创建的CustomMiddleware中的两个路径分组

php artisan make:middleware MyMiddleware

现在使用此中间件检查 / 的数量并传递请求或根据您的要求抛出异常。