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

route web.php文件中的Laravel访问路由参数,php,laravel,laravel-5,laravel-routing,laravel-5.6,Php,Laravel,Laravel 5,Laravel Routing,Laravel 5.6,参数被发布到某个\u名称,如下所示: {{route('some_name',$id='1'}}} 在if条件下如何访问它 Route::group(['prefix' => '/'], function() { if ( condition ) { Route::get('/route/{id}', 'ControllerA@methodA')->name('some_name'); } else{ Route::get('/

参数被发布到
某个\u名称
,如下所示:
{{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)

它不起作用。

检查文档,就我个人而言,我从来没有在我的routes文件夹中做过
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

  • 那个身份证有效吗?你怎么知道的
  • ID是整数还是字符串
  • 请求中是否存在ID
  • 有了这3个问题,您将得到验证+重定向到不同的方法,如果它是数据库查询感兴趣的ID,那么其中也将包含数据库代码

    我喜欢认为的正常过程是,当它到达路由时,它应该到达授权和身份验证(如Bak87所说的中间件)。在那里,您可以验证他是否经过身份验证,如果他是某个用户,无论您喜欢什么

    在初始验证之后,您可以根据需要将其重定向到特定控制器中的特定方法,但是,我不建议这样做,因为根据某些标准,类应该只有一个用途(但最终,您可以按照自己的需要构建应用程序)

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

    如果对FormRequest不感兴趣,您可以使用Eloquent(如果您要查找的ID与之相关)
    FindOrFail
    来验证它是否存在(如果不存在,则返回404错误not found,如果您有404.blade.php文件)。这样,当它到达控制器的方法时,它已通过部分进行验证,其中路由由主授权和身份验证保护,FormRequest进行输入验证,您可以从控制器的方法中具体返回您想要的任何内容


    显然,我们不知道你返回的视图是什么,但是如果稍微不同的话,考虑重构它,以便只返回1个视图,由其他刀片

    组成,你必须使用<代码>前缀> =“{ID} > <代码> $ID>代码>可在<代码>函数($ID)中获得。。老实说,我不确定您在这里试图处理什么。您可以使用
    {id?}
    作为可选参数,使用
    函数($id=null)
    ,然后在
    $id
    是否为
    null
    的情况下处理该案例,因此可以尝试一下吗?我最后只执行了一个路由,检查控制器内的条件并返回相应的视图。谢谢。您认为哪一个更好:您的解决方案还是只执行一个路由并检查控制器内的条件并返回批准te view?两者对我都有效。我想知道哪一个更好。我认为这取决于逻辑的不同,如果您正在执行A/B测试,我认为您的解决方案更好。因此,如果创建新控制器的逻辑没有重大变化,只需根据@Victorb的条件显示相应的视图