Php 基于中间件的条件路由
我需要基于中间件为同一url调用不同的控制器。url必须相同,因此在中间件中重定向不是一个选项。下面的代码是示例,几十个路由的控制器已经完成,因此也没有选项检查会话值 尝试创建两个不同的中间件(会话值为/hasnt),但后一个路由组仍会覆盖前一个。有线索吗?也许需要一种不同的方法 route.php如下所示:Php 基于中间件的条件路由,php,laravel,laravel-5,routing,middleware,Php,Laravel,Laravel 5,Routing,Middleware,我需要基于中间件为同一url调用不同的控制器。url必须相同,因此在中间件中重定向不是一个选项。下面的代码是示例,几十个路由的控制器已经完成,因此也没有选项检查会话值 尝试创建两个不同的中间件(会话值为/hasnt),但后一个路由组仍会覆盖前一个。有线索吗?也许需要一种不同的方法 route.php如下所示: Route::group(array('namespace' => 'Admin', 'prefix' => 'admin', 'middleware' => 'auth
Route::group(array('namespace' => 'Admin', 'prefix' => 'admin', 'middleware' => 'auth'), function () {
// set of default routes
Route::get('/', array('as' => 'admin', 'uses' => 'FirstController@index'))->middleware('admin');
Route::get('/profile', array('as' => 'profile', 'uses' => 'FirstController@profile'))->middleware('admin');
Route::group(array('middleware' => 'sessionhassomething'), function () {
// set of the same routes like above but overwritten if middleware validates
Route::get('/', array('as' => 'admin', 'uses' => 'SecondController@index'))->middleware('admin');
Route::get('/profile', array('as' => 'profile', 'uses' => 'SecondController@profile'))->middleware('admin');
});
});
SessionHasSomething中间件:
class sessionHasSomething {
public function handle($request, Closure $next)
{
if(session()->has("something_i_need_to_be_set")) {
return $next($request);
}
// return what if not set, or ...?
}
}
提前谢谢 我们几乎有同样的问题,下面是我所做的。(我没有使用中间件) 在我的
blade.php
中,我使用了@if
、@else
和@endif
<?php
use App\Models\User;
$check = User::all()->count();
?>
@if ($check == '0')
// my html/php codes for admin
@else
// my html/php codes for users
@endif
@如果($check='0')
//我的html/php管理员代码
@否则
//我的html/php用户代码
@恩迪夫
您也可以在控制器中执行此操作,使用
if
,else
如果您只检查会话()->是否有('something')
,则可以使用路由闭包来在路由内添加需要动态的条件
以下是一个例子:
Route::get('/', function() {
$controller = session()->has('something')) ? 'SecondController' : 'FirstController';
app('app\Http\Controllers\' . $controller)->index();
});
->index()
是控制器类中的方法。我非常喜欢这种方法,但是所有~100条路由都必须从route.php移动到中间件。这对我来说似乎有点不合适,但它可能会起作用。可以理解,我很快就会找到另一种方法。问题是我们已经完成了刀片和控制器,因此数百个条件必须以这种方式进行。我想避免这种情况。