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

时间:2018-07-13 17:27:11

标签: php laravel laravel-5 laravel-routing laravel-5.6

该参数像这样发布到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');;
    }
});

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

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

它不起作用。

3 个答案:

答案 0 :(得分:1)

检查文档,就我个人而言,我从未在routes文件夹中进行过if的操作,此外,如果您搞乱了用户,那么实践这样的事情,使所有事情都在视图中发生是非常危险的是否登录,请执行auth::check()之类的操作,但切勿使用路由web.php来确保应用程序的安全性,其他所有操作均在控制器和视图上进行。

答案 1 :(得分:0)

我认为您可以做的最好的事情就是使用中间件,例如:

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

    return $next($request);
}

答案 2 :(得分:0)

我认为验证路由文件中的ID以重定向到不同的控制器不是一个好习惯,这是为什么:

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

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

带着这三个问题,您将需要进行验证+重定向到不同的方法,并且如果它是数据库查询所感兴趣的ID,那么您还将在其中拥有数据库代码。

我想想的正常过程是,当到达路由时,应该到达授权和认证(如Bak87所说的中间件)。在其中,您可以验证他是否已通过身份验证,他是否是特定用户,无论您想要什么。

此初始验证之后,您可以根据需要将其重定向到某个控制器中的某个方法,但是我不建议您这样做,因为根据某些标准,一个类应该具有单一目的(但最后,您可以根据需要构建应用程序。)

我认为一条路由或一组路由应该具有中间件(用于进行请求的人需要进行的主要验证),并且每个路由都应指向控制器中的单个方法。一旦到达控制器,您就可以拥有自己的自定义FormRequest,而不用将(Request $ request)作为方法的参数,可以在其中验证ID。

如果对FormRequest不感兴趣,则可以使用Eloquent(如果要查找的ID与之相关)$unwind来验证它是否存在(如果不存在,则返回404错误)找不到(如果您有404.blade.php文件)。这样,当到达控制器的方法时,它已被各节验证,然后通过主要的授权和身份验证,FormRequest对路由进行保护,以执行输入的验证,并且您可以从控制器的地址专门返回所需的任何内容。方法。

很明显,我们不知道您返回的视图是什么,但是如果稍有不同,请考虑对其进行重构,以便仅返回由其他刀片组成的1个视图。

相关问题