Routing 在Laravel 5中,如何实现App::before()过滤器?
在Laravel4.2中,我有一个before过滤器,它根据URL(admin.example.com vs example.com)设置雄辩的模型和表 这是我的过滤代码:Routing 在Laravel 5中,如何实现App::before()过滤器?,routing,laravel-5,laravel-middleware,Routing,Laravel 5,Laravel Middleware,在Laravel4.2中,我有一个before过滤器,它根据URL(admin.example.com vs example.com)设置雄辩的模型和表 这是我的过滤代码: App::before(function($request) { // Check if we are using the admin URL $host = $request->getHost(); $parts = explode('.', $host); if ($parts[0]
App::before(function($request)
{
// Check if we are using the admin URL
$host = $request->getHost();
$parts = explode('.', $host);
if ($parts[0] == 'admin')
{
// Set the config for user info (not sponsor)
Config::set('auth.model', 'Admin');
Config::set('auth.table', 'admins');
}
});
我尝试在laravel 5中为此创建中间件,代码如下:
class AdminOrSponsor implements Middleware {
public function handle($request, Closure $next)
{
$host = $request->getHost();
$parts = explode('.', $host);
if ($parts[0] == 'admin'){
Config::set('auth.model', 'Admin');
Config::set('auth.table', 'admins');
}
return $next($request);
}
}
在我的routes.php文件中,我正在设置基于auth.model设置调用的控制器,如下所示:
Route::get('/auth/login', Config::get('auth.model') . 'Controller@getLogin');
Route::post('/auth/login', Config::get('auth.model') . 'Controller@postLogin');
Route::get('/auth/logout', Config::get('auth.model') . 'Controller@getLogout');
我发现路由都是在中间件之前读取的,所以我试图通过Config::set()进行的更改没有发生。我只获取auth.php配置文件中设置的值
我做错了什么?在Laravel 5中应该如何做?似乎您希望根据客户端的主机名加载不同的路由 我理解你的解决方案,但这是一种黑客行为,如果你想对它进行单元测试,甚至可以让它工作的话,你会遇到麻烦。配置是在路由之前加载的,因此不可能根据请求设置路由,除非依赖$\u服务器(这也会破坏unittests) 我会这样做:
Route::get('/auth/login', 'AuthController@getLogin');
Route::get('/auth/login/admin', 'AdminsController@getLogin');
Route::get('/auth/login/sponsors', 'SponsorsController@getLogin');
auth/login
到管理员或发起人的重定向然后,您只使用“标准”的laravel功能,您可以确保它不会造成任何奇怪的副作用。我自己没有测试过这一点,但您是否尝试过简单地将before过滤器添加到app/Providers/RouteServiceProvider.php的boot()方法中?在这里查看升级指南的“路由筛选器”部分:我将我的筛选器添加到RouteServiceProvider并使其正常工作。谢谢你的提示。这不是一个很好的解决方案,因为我需要访问Request::getHost(),而Request在这里不可用。我实现了对$\u SERVER['HTTP\u HOST']的临时使用,以获取所需的内容。希望有人能找到一种更合适的方法来实现这一点。为了能够访问Request::getHost(),您只需要在类之前的顶部添加“use illumb\Http\Request;”。