Php 我可以在Laravel的路由组中对多个域进行分组吗?
假设我有以下几点:Php 我可以在Laravel的路由组中对多个域进行分组吗?,php,laravel,routing,laravel-routing,Php,Laravel,Routing,Laravel Routing,假设我有以下几点: Route::group(array('domain' => array('admin.example.com')), function() { ... }); Route::group(array('domain' => array('app.example.com')), function() { ... }); Route::group(array('domain' => array('dev.app.example.com')),
Route::group(array('domain' => array('admin.example.com')), function()
{
...
});
Route::group(array('domain' => array('app.example.com')), function()
{
...
});
Route::group(array('domain' => array('dev.app.example.com')), function()
{
...
});
有没有办法让多个域共享一个路由组?比如:
Route::group(array('domain' => array('dev.app.example.com','app.example.com')), function()
{
...
});
目前你不能。我也有同样的“问题”;我的解决办法是用foreach在你的子域中循环并注册路由。Laravel似乎不支持这一点 我不知道为什么我没有更早地想到这一点,但我想一个解决方案是在一个单独的函数中声明路由,并将其传递给两个路由组
Route::group(array('domain' => 'admin.example.com'), function()
{
...
});
$appRoutes = function() {
Route::get('/',function(){
...
});
};
Route::group(array('domain' => 'app.example.com'), $appRoutes);
Route::group(array('domain' => 'dev.app.example.com'), $appRoutes);
我不确定此解决方案是否会对性能产生重大影响。对此也感兴趣!我正在尝试注册一个本地开发+生产子域路由,用于一个控制器操作 i、 e 我试过:
# Failed
Route::group(array('domain' => "{account}.app.{top_level_domain}"), function() {
Route::get('/{id}', 'SomeController@getShow');
});
但它失败了
这不是一个大问题,正如DesignerGuy所提到的,我可以将一个函数传递给两个路由,但是如果它们可以分组的话,这将更加优雅:)请查看此链接
Route::group(数组('domain'=>'{subdomain}.example.com'),函数()
{
...
});
或者使用这个软件包
它可以帮助您像这样设置组路由上的位置
Route::group(数组('domain'=>'{maindomain}'),函数()
{
...
})->其中('maindomain','.+\.example\.com$');
签入,如果您的主域是myapp,生产中是myapp.com
,本地环境中是myapp.dev
请尝试使用*
Route::group(array('domain' => '{subdomain}.myapp.*'),
function()
{
...
});
拉威尔5.1
Route::pattern('subdomain', '(dev.app|app)');
Route::group(['domain' => '{subdomain}.example.com'], function () {
...
});
据
在laravel 5.4+中,您可以使用以下方式:
Route::domain('{account}.myapp.com')->group(function () {
Route::get('user/{id}', function ($account, $id) {
//
});
});
您也可以传递域名:
Route::pattern('domain', '(domain1.develop|domain2.develop|domain.com)');
Route::group(['domain' => '{domain}'], function() {
Route::get('/', function($domain) {
return 'This is the page for ' . $domain . '!';
});
});
以防您需要知道控制器是用哪个域名调用的。
使用Laravel 5.6对其进行了测试。在Laravel关于同一主题的讨论中发现的一个更好的答案是使用宏。这对我很有用。
Route::宏(“域”,函数(数组$domains,\Closure$definition){
foreach($domains作为$domain){
路由::组(['domain'=>$domain],$definition);
}
});
路由::域(['foo.bar.dev','foo.bar'],函数($Route){
//做事
});
我正在尝试解决类似的问题。也就是说,在生产环境中使用“ui.domain.com”和“api.domain.com”,同时允许我的开发团队在本地开发环境中使用“ui.domain.local”和“api.domain.local”。在子域之后支持通配符就可以了。我要解决的基本问题是解决相互冲突的路线。例如,ui.domain.com/messages应返回HTML,api.domain.com/messages应返回JSON。因此,两个具有“域”=>“api:(:any)”和“域”=>“ui::any)”的组是理想的。这是一个很好的技巧。但是请注意,域参数将作为任何子路由的第一个参数传递:Route::get('users/{id},'UsersController@show'); // id=“example.com”
为了避免这种情况,您可以始终使用环境变量:$domain=env('BASE_domain','example.com');路由::组(['domain'=>'subdomain..$domain],function(){…})代码>这不起作用路由::组(数组('domain'=>'{maindomain}'),函数(){…})->其中('maindomain','.+\.example\.com$)代码>谢谢。我认为这不会影响性能,因为您只是将其存储在数组变量中,并将其填充到2声明中。干杯这真的适用于php artisan route:cache
?“无法缓存基于闭合的路由。若要使用路由缓存,必须将任何闭合路由转换为控制器类。”我不确定@Fredrik,但这句话可能是针对实际的路由实现,而不是路由的构造。在上面的示例中,如果Route::get
引用了一个控制器方法,那么它可能是可缓存的。
Route::domain('{account}.myapp.com')->group(function () {
Route::get('user/{id}', function ($account, $id) {
//
});
});
Route::pattern('domain', '(domain1.develop|domain2.develop|domain.com)');
Route::group(['domain' => '{domain}'], function() {
Route::get('/', function($domain) {
return 'This is the page for ' . $domain . '!';
});
});