Laravel 访问路由 web.php 文件中的路由参数

Laravel access route parameter in route web.php file

参数被发布到 some_name 是这样的: {{ route('some_name', $id = '1'}} 如何在 if 条件下访问它?

Route::group(['prefix' => '/'], function()
{
    if ( condition )
    {
        Route::get('/route/{id}', 'ControllerA@methodA')->name('some_name');
    } else{
        Route::get('/route{id}', 'ControllerB@methodB')->name('some_name');;
    }
});

如何在if (condition)中使用{id}参数? 我试过了

Route::group(['prefix' => '/'], function($id)
    {
        if ( $id == 1)

它不起作用。

检查文档,就我个人而言,我从来没有在我的路线文件夹中做过 if,除此之外,练习这样的东西真的很危险,让一切都发生在视图中,如果你搞砸了无论用户是否登录,执行 auth::check() 或类似的操作,但永远不要玩路由 web.php 以确保您应用程序的安全性,其他所有内容都在控制器和视图上进行。

我认为你能做的最好的事情就是中间件,例如:

public function handle($request, Closure $next)
{
    if ($request->id == 'some_value') {
        redirect action('ControllerA@methodA');
    }
    else {
      redirect action('ControllerB@methodB');
    }

    return $next($request);
}

我认为验证路由文件中的 id 以重定向到不同的控制器不是一个好习惯,原因如下:

您将向该端点发送请求并发送一个 ID。

  1. 这个ID有效吗?你怎么知道的?
  2. ID是整数还是字符串?
  3. 请求中是否存在ID?

有了这 3 个问题,您最终将进行验证 + 重定向到不同的方法,如果它是数据库查询感兴趣的 ID,您也会在其中包含数据库代码。

我想的正常程序是当它命中路由时,它应该命中授权和身份验证(如 Bak87 所说的中间件)。在那里,您可以验证他是否经过身份验证,他是否是某个用户,任何您想要的。

在此初始验证之后,您可以根据需要将其重定向到某个控制器中的某个方法,但是,我不建议 class 根据某些标准应该只有一个目的(但最后,您可以按照自己的意愿构建应用程序)。

我认为一个路由或一组路由应该有一个中间件(无论您需要对发出请求的人进行什么主要验证),并且每个路由都应该指向控制器中的一个方法。一旦它到达控制器,而不是将 (Request $request) 作为方法的参数,您可以拥有自己的自定义 FormRequest,如果您愿意,可以在其中验证 ID。

如果 FormRequest 不感兴趣,您可以使用 Eloquent(如果您要查找的 ID 与其相关)FindOrFail 来验证它是否存在(如果不存在) t,returns 一个 404 错误未找到,如果你有一个 404.blade.php 文件)。这样,当它到达控制器的方法时,它已经被部分验证,然后路由受到主要授权和身份验证的保护,FormRequest 进行输入验证,你可以具体 return 无论你想要什么就像来自控制器的方法。

显然我们不知道您的 return 视图是什么,但如果彼此之间存在细微差异,请考虑重构它以便 return 只有 1 个视图,由其他刀片组成