gpt4 book ai didi

在任何域上的Laravel 5子域路由

转载 作者:行者123 更新时间:2023-12-04 04:16:47 25 4
gpt4 key购买 nike

在laravel 5应用程序中,我正在尝试为子域创建路由
不知道域。

Route::group(array('domain' => 'subdomain.domain.tld'), function() {
Route::get('/', 'testController@getTest2');
});
Route::get('/', 'testController@getTest1');

这种路由有效,我得到getTest2()来调用子域,而getTest1()来进行不带子域的调用。

现在,我希望它可以与通配符域一起使用,但是无需向 Controller 发送参数,
因此开发环境中的应用程序可以在任何域上。
(我还考虑过使用.env来存储域,但是仅路由似乎太麻烦了)

我试过了
array('domain' => 'subdomain.{domain}.{tld}')

这需要 Controller 方法上的参数。
我已经尝试过
array('domain' => 'subdomain.{domain?}.{tld?}')

它不需要参数,但无论如何都会发送它们,因此我的实际路线参数会发生变化。

我也看到了 http://laravel-tricks.com/tricks/dynamic-subdomain-routing,但是我不喜欢在过滤器中处理域的想法。

还有其他方法可以使通配符域在处理路由组后被忽略吗?

最佳答案

我发现做到这一点的最佳方法是创建一个中间件,该中间件从您的 route 删除特定的参数。例如,在您的情况下:

class Subdomain {
public function handle($request, Closure $next)
{
$route = $request->route();
$domain = $route->parameter('domain');
$tld = $route->parameter('tld');

//do something with your params

$route->forgetParameter('domain');
$route->forgetParameter('tld');
return $next($request);
}
}

//inside your Kernel.php, make sure to register the middleware
protected $routeMiddleware = [
'subdomain' => \App\Http\Middleware\Subdomain::class,
];

Route::group(['middleware' => 'subdomain', 'domain' => 'subdomain.{domain}.{tld}'], function () {
Route::get('/', function () {
dd(func_get_args()); //no args, because it was removed in the middleware
});
});

关于在任何域上的Laravel 5子域路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31376592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com