合并一些旧的,未解决的问题,以及与我自己的问题保持一致的问题。
路线文件:
echo url()->current() ."<br>";
echo request()->getHost();
Route::domain('pro.local')->group(function () {
Route::get('/', function () {
dd('HELLO');
});
});
Route::group(['domain' => 'pro.local'], function() {
dd('PRO');
});
Route::group(['domain' => 'media.local'], function() {
dd('MEDIA');
});
Route::group(['domain' => 'software.local'], function() {
dd('SOFTWARE');
});
Route::get('/', function () {
return view('welcome');
});
欲望和环境:三个域pro.local,media.local和software.local都使用MAMP PRO 5.2和Laravel 5.7指向相同的public
文件夹。到目前为止,这是我对该项目所做的一切。
假设:使用Route::domain
或Route::group
应该导致返回dd()
文本或welcome
模板。
到目前为止:我知道我正在使用的mono-repo设置是有效的,因为我已经让这三个站点运行了mono-repo大约3年,并且可以共享服务,而不是跨项目。有了这个说,必须SSH到三个单独的文件夹来运行composer update
和npm update
是很烦人的;特别是当每个项目的composer.json
和package.json
文件基本相同时...我目前使用gulp
来移动和复制文件以保持同步。
问题:无论域名如何,只有PRO得到回应。
它似乎跳过Route::domain
并定居在第一个Route::group
,正如通过将dd('MEDIA')
呼叫移至顶部所证明的那样。
Route::group
中的代码总是运行,因为Laravel编译各种路由定义供以后使用。因此,当Laravel构建路由列表时,您的dd()
将被执行,无论您使用的是哪个域,都会使整个过程短路。
如果你将每个调试dd
调用放在每个路由组中的Route::get('/', function () {})
内(就像你第一次使用Route::domain('pro.local')
位一样),你就会得到你期望的结果。
Route::group(['domain' => 'pro.local'], function() {
Route::get('/', function () {
dd('PRO');
});
});
Route::group(['domain' => 'media.local'], function() {
Route::get('/', function () {
dd('MEDIA');
});
});
Route::group(['domain' => 'software.local'], function() {
Route::get('/', function () {
dd('SOFTWARE');
});
});
Route::get('/', function () {
return view('welcome');
});
替代方案:将它们全部切换为使用Route::domain
也最终在另一个论坛上发现。