该参数像这样发布到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)
它不起作用。
答案 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。
带着这三个问题,您将需要进行验证+重定向到不同的方法,并且如果它是数据库查询所感兴趣的ID,那么您还将在其中拥有数据库代码。
我想想的正常过程是,当到达路由时,应该到达授权和认证(如Bak87所说的中间件)。在其中,您可以验证他是否已通过身份验证,他是否是特定用户,无论您想要什么。
此初始验证之后,您可以根据需要将其重定向到某个控制器中的某个方法,但是我不建议您这样做,因为根据某些标准,一个类应该具有单一目的(但最后,您可以根据需要构建应用程序。)
我认为一条路由或一组路由应该具有中间件(用于进行请求的人需要进行的主要验证),并且每个路由都应指向控制器中的单个方法。一旦到达控制器,您就可以拥有自己的自定义FormRequest,而不用将(Request $ request)作为方法的参数,可以在其中验证ID。
如果对FormRequest不感兴趣,则可以使用Eloquent(如果要查找的ID与之相关)$unwind
来验证它是否存在(如果不存在,则返回404错误)找不到(如果您有404.blade.php文件)。这样,当到达控制器的方法时,它已被各节验证,然后通过主要的授权和身份验证,FormRequest对路由进行保护,以执行输入的验证,并且您可以从控制器的地址专门返回所需的任何内容。方法。
很明显,我们不知道您返回的视图是什么,但是如果稍有不同,请考虑对其进行重构,以便仅返回由其他刀片组成的1个视图。