Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel一次只能访问两条路线中的一条_Php_Laravel_Middleware_Laravel Routing_Laravel 5.6 - Fatal编程技术网

Php Laravel一次只能访问两条路线中的一条

Php Laravel一次只能访问两条路线中的一条,php,laravel,middleware,laravel-routing,laravel-5.6,Php,Laravel,Middleware,Laravel Routing,Laravel 5.6,如果我的web.php中有两条路由A和B。如何进行如下中间件检查: if (something in my database have status == 0) { return $next($request); ROUTE A } else { return $next($request); ROUTE B } 我提到了return$next($request)因为其中有一个条件,我不希望路由同时可以访问。因此,例如,如果我转到url/routeA如果满足条件,则允许如果不显

如果我的web.php中有两条路由A和B。如何进行如下中间件检查:

if (something in my database have status == 0) {
    return $next($request); ROUTE A
} else {
    return $next($request); ROUTE B
}
我提到了
return$next($request)因为其中有一个条件,我不希望路由同时可以访问。因此,例如,如果我转到
url/routeA
如果满足条件,则允许如果不显示路由B。路由B也是如此

逻辑是这样的:用户从列表中选择一个项目(在数据库中,列表是这样表示的:
list
带有
id、name、status
),如果状态为0,则显示路由a如果状态为1,则显示路由B。如果我试图访问
url/routeB?listID1
,则直接检查条件(对于
id1
)并显示路线A或B


状态中只有0或1。如果状态为1,则所有用户都将直接访问routeB,如果状态为0,则第一个访问routeA的用户将执行一些操作(将状态设置为1)重定向到routeB。他之后的下一个用户将直接到达routeB

您可以使用route name并在任何地方使用它

  //define route
  Route::get('/A', 'ControllerA@methodA')->name('A');
  Route::get('/B', 'ControllerB@methodB')->name('B');
在控制器中,只需使用路由名称

否则,可以通过获取路由组参数来执行某些操作


您可以使用路由名称,并且只需在任何地方使用它即可

  //define route
  Route::get('/A', 'ControllerA@methodA')->name('A');
  Route::get('/B', 'ControllerB@methodB')->name('B');
在控制器中,只需使用路由名称

否则,可以通过获取路由组参数来执行某些操作


如果需要,可以从中间件执行重定向:

if (something in my database have status == 0) {
    return redirect()->route('route_a_name');
} else {
    return redirect()->route('route_b_name');
}
只需确保在
routes/web.php
中命名路由即可

例如:

Route::get('/route_a', 'YourController@RouteA')->name('route_a_name');
Route::get('/your_route/{status}', 'YourController@ControllerAction');
编辑

根据您提供的其他信息,您试图实现的中间件有点过头了。相反,您可以简单地使用单个路由并传入状态参数。有关布线参数的详细信息,请参见

例如:

Route::get('/route_a', 'YourController@RouteA')->name('route_a_name');
Route::get('/your_route/{status}', 'YourController@ControllerAction');
然后在控制器中,根据状态处理逻辑:

function ControllerAction(Request $request, $status) {
    if ($status == 0) {
        //Show view for A
    } else {
        //Show view for B
    }
}

如果需要,可以从中间件执行重定向:

if (something in my database have status == 0) {
    return redirect()->route('route_a_name');
} else {
    return redirect()->route('route_b_name');
}
只需确保在
routes/web.php
中命名路由即可

例如:

Route::get('/route_a', 'YourController@RouteA')->name('route_a_name');
Route::get('/your_route/{status}', 'YourController@ControllerAction');
编辑

根据您提供的其他信息,您试图实现的中间件有点过头了。相反,您可以简单地使用单个路由并传入状态参数。有关布线参数的详细信息,请参见

例如:

Route::get('/route_a', 'YourController@RouteA')->name('route_a_name');
Route::get('/your_route/{status}', 'YourController@ControllerAction');
然后在控制器中,根据状态处理逻辑:

function ControllerAction(Request $request, $status) {
    if ($status == 0) {
        //Show view for A
    } else {
        //Show view for B
    }
}


每个用户的状态不同?状态中只有0或1。如果状态为1,则所有用户都将直接访问routeB,如果状态为0,则第一个访问routeA的用户将执行一些操作(将状态设置为1)重定向到routeB。他之后的下一个用户将直接到达routeB。当他们执行操作时,肯定会重定向,然后所有其他用户将在middlewareYes中点击else条件,但我如何设置条件?您是否考虑过
laravel策略来解决您的目的?每个用户的状态不同?状态中只有0或1。如果状态为1,则所有用户都将直接访问routeB,如果状态为0,则第一个访问routeA的用户将执行一些操作(将状态设置为1)重定向到routeB。他之后的下一个用户将直接到达routeB。当他们执行此操作时,肯定会重定向,然后所有其他用户将在middlewareYes中达到else条件,但我如何设置条件?您是否考虑过
laravel policy
来解决您的目的?我可能没有路由名称数组,它只是增加了一层复杂性。除非您有很多路由,否则只需将它们写在数组的位置。@JustCarty您在这方面是正确的,但我认为当出现更多条件时,这会有所帮助。我不希望通过url访问路由,除非选中条件。所以我不想只在web.php中添加路由,让它们可以自由访问。我需要
//define routes
中的if语句。我不知道如何在
if
语句中访问另一个routes的参数。@Victordb我不确定您是否需要类似这样的“Route::get('/Route/{id}',函数($id){if($id==1){//do something}else{//do others};”是的,但由于某些原因,我无法在
Route::group(['prefix'=>'/')函数($id)中使用它
。我可能没有路由名称数组,这只是增加了一层复杂性。除非有很多路由,否则只需将它们写在数组的位置。@JustCarty你在这方面是对的,但我认为当更多条件发生时,这会很有帮助。我不希望通过url访问路由,除非条件被选中。所以我不希望只想在web.php中添加路由并让它们自由访问。我需要
//定义路由
中的if语句。我不知道如何从
if
语句中的另一个路由访问参数。@victorb我不确定您是否想要这样的'Route::get('/Route/{id}',函数($id){if($id==1){//do something}else{//do others}});“是的,但由于某种原因,我不能在
Route::group(['prefix'=>'/'),函数($id)中使用它”
。我不想通过url访问路由,因为条件已检查。所以我不想只在web.php中添加路由并让它们自由访问。那么为什么要使用中间件呢?为什么不只使用一条路由并传递状态?例如,
路由::get('/your_route/{status}','YourController@YourAction')
你说得对,我只做了1条路由,我在控制器中检查了状态,并根据状态返回了相应的视图。请使用此选项编辑你的答案,我将对其进行投票。谢谢。更新。谢谢。我不希望通过url访问路由,因为条件已检查。因此,我不想只在中添加路由使用web.php并让em