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
FindOrFail
来验证它是否存在(如果不存在,则返回404错误not found,如果您有404.blade.php文件)。这样,当它到达控制器的方法时,它已通过部分进行验证,其中路由由主授权和身份验证保护,FormRequest进行输入验证,您可以从控制器的方法中具体返回您想要的任何内容
显然,我们不知道你返回的视图是什么,但是如果稍微不同的话,考虑重构它,以便只返回1个视图,由其他刀片
组成,你必须使用<代码>前缀> =“{ID} > <代码> $ID>代码>可在<代码>函数($ID)中获得。。老实说,我不确定您在这里试图处理什么。您可以使用{id?}
作为可选参数,使用函数($id=null)
,然后在$id
是否为null
的情况下处理该案例,因此可以尝试一下吗?我最后只执行了一个路由,检查控制器内的条件并返回相应的视图。谢谢。您认为哪一个更好:您的解决方案还是只执行一个路由并检查控制器内的条件并返回批准te view?两者对我都有效。我想知道哪一个更好。我认为这取决于逻辑的不同,如果您正在执行A/B测试,我认为您的解决方案更好。因此,如果创建新控制器的逻辑没有重大变化,只需根据@Victorb的条件显示相应的视图