Наша команда пытается преобразовать старую многопользовательскую архитектуру в Laravel и испытывает некоторые трудности с сохранением СУХОГО в наших маршрутах / представлениях.
В разделе нашего аккаунта есть несколько просмотров: панель управления аккаунтом, изменение профиля, оплатаметоды, регистрации и т. д. Однако мы предоставляем несколько автономных веб-сайтов для клиента, и существует несколько структур URL для доступа пользователя к своей учетной записи:
В дополнение к стандартному ...
... они также могут получить доступ к своей учетной записи через различные автономные веб-сайты:
Все приведенные выше URL дают одинаковую информацию, но с разным макетом / темой, применяемой для каждого автономного веб-сайта. Прямо сейчас маршруты, которые я установил для вышеупомянутых, выглядят так:
// #### CLIENT ONE - ROOT
Route::domain('{subdomain}.ourdomain.com')->group(function() {
Route::middleware(['setTheme:clientone-account-theme'])->group(function() {
Route::get('/', 'ClientController@index')->name('index');
Route::prefix('account')->group(function() {
Route::get('/', 'AccountController@index')->name('clientone.account.show');
Route::get('/edit', 'AccountController@edit')->name('clientone.account.edit');
...
});
});
// #### CLIENT ONE - EVENT APP ONE
Route::prefix('event-app-one')->group(function() {
Route::middleware(['setTheme:clientone-eventapp-one-theme'])->group(function() {
Route::get('/', 'EventAppController@index')->name('clientone.eventapp.one.index');
...
Route::prefix('account')->group(function() {
Route::get('/', 'AccountController@index')->name('clientone.eventapp.one.account.show');
Route::get('/edit', 'AccountController@edit')->name('clientone.eventapp.one.account.edit');
...
});
});
});
// #### CLIENT ONE - EVENT APP TWO
Route::prefix('event-app-2')->group(function() {
Route::middleware(['setTheme:clientone-eventapp-two-theme'])->group(function() {
Route::get('/', 'EventAppController@index')->name('clientone.eventapp.two.index');
...
Route::prefix('account')->group(function() {
Route::get('/', 'AccountController@index')->name('clientone.eventapp.two.account.show');
Route::get('/edit', 'AccountController@edit')->name('clientone.eventapp.two.account.edit');
...
});
});
});
Все эти маршруты в настоящее время работают. Нам не нравится включать имя клиента или приложения во все наши имена маршрутов, потому что они становятся довольно длинными и не могут быть использованы повторно, но если мы их уберем, мы обнаружим, что наши URL-адреса маршрутов переопределят друг друга.
Однако, если мы сделаем это таким образом, наши учетные записи, которые мы разделяем по всем этим URL-адресам, не смогут использовать именованные ссылки на маршруты для href, потому что мы не знаем, какой из них использовать. Например, мы не можем сделать это в блейде ...
<a href="{{ route($subdomain . '.account.edit', ['subdomain' => $subdomain]) }}">Edit Profile</a>
... потому что, хотя это будет работать на clientone.ourdomain.com/account/, оно не будет работать наclientone.ourdomain.com/event-app-one/account/.
Должен ли я просто не использовать имена маршрутов для ссылок в наших представлениях и использовать вместо них относительную ссылку? Или я иду по своему маршруту, называя все неправильно? Единственное, о чем я могу думать, это скопировать все файлы представлений и иметь одну версию для .com / account / и другую для .com / all-event-apps / account / и просто использовать разные наборы имен маршрутов для каждого,Хотя кажется неправильным дублировать по существу те же функции в этих представлениях.