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。
- 这个ID有效吗?你怎么知道的?
- ID是整数还是字符串?
- 请求中是否存在ID?
有了这 3 个问题,您最终将进行验证 + 重定向到不同的方法,如果它是数据库查询感兴趣的 ID,您也会在其中包含数据库代码。
我想的正常程序是当它命中路由时,它应该命中授权和身份验证(如 Bak87 所说的中间件)。在那里,您可以验证他是否经过身份验证,他是否是某个用户,任何您想要的。
在此初始验证之后,您可以根据需要将其重定向到某个控制器中的某个方法,但是,我不建议 class 根据某些标准应该只有一个目的(但最后,您可以按照自己的意愿构建应用程序)。
我认为一个路由或一组路由应该有一个中间件(无论您需要对发出请求的人进行什么主要验证),并且每个路由都应该指向控制器中的一个方法。一旦它到达控制器,而不是将 (Request $request) 作为方法的参数,您可以拥有自己的自定义 FormRequest,如果您愿意,可以在其中验证 ID。
如果 FormRequest 不感兴趣,您可以使用 Eloquent(如果您要查找的 ID 与其相关)FindOrFail
来验证它是否存在(如果不存在) t,returns 一个 404 错误未找到,如果你有一个 404.blade.php 文件)。这样,当它到达控制器的方法时,它已经被部分验证,然后路由受到主要授权和身份验证的保护,FormRequest 进行输入验证,你可以具体 return 无论你想要什么就像来自控制器的方法。
显然我们不知道您的 return 视图是什么,但如果彼此之间存在细微差异,请考虑重构它以便 return 只有 1 个视图,由其他刀片组成
参数被发布到 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。
- 这个ID有效吗?你怎么知道的?
- ID是整数还是字符串?
- 请求中是否存在ID?
有了这 3 个问题,您最终将进行验证 + 重定向到不同的方法,如果它是数据库查询感兴趣的 ID,您也会在其中包含数据库代码。
我想的正常程序是当它命中路由时,它应该命中授权和身份验证(如 Bak87 所说的中间件)。在那里,您可以验证他是否经过身份验证,他是否是某个用户,任何您想要的。
在此初始验证之后,您可以根据需要将其重定向到某个控制器中的某个方法,但是,我不建议 class 根据某些标准应该只有一个目的(但最后,您可以按照自己的意愿构建应用程序)。
我认为一个路由或一组路由应该有一个中间件(无论您需要对发出请求的人进行什么主要验证),并且每个路由都应该指向控制器中的一个方法。一旦它到达控制器,而不是将 (Request $request) 作为方法的参数,您可以拥有自己的自定义 FormRequest,如果您愿意,可以在其中验证 ID。
如果 FormRequest 不感兴趣,您可以使用 Eloquent(如果您要查找的 ID 与其相关)FindOrFail
来验证它是否存在(如果不存在) t,returns 一个 404 错误未找到,如果你有一个 404.blade.php 文件)。这样,当它到达控制器的方法时,它已经被部分验证,然后路由受到主要授权和身份验证的保护,FormRequest 进行输入验证,你可以具体 return 无论你想要什么就像来自控制器的方法。
显然我们不知道您的 return 视图是什么,但如果彼此之间存在细微差异,请考虑重构它以便 return 只有 1 个视图,由其他刀片组成