Загружать бэкэнд и фронтенд маршруты отдельно, не мешая - PullRequest
1 голос
/ 16 июня 2020

У меня есть два типа маршрутов: маршруты администратора и маршруты внешнего интерфейса.

Маршруты внешнего интерфейса

Route::get('{locale?}/', ['uses' => '\App\Http\Controllers\loadViewController@home']);
Route::get('{locale?}/{page}', ['uses' => '\App\Http\Controllers\loadViewController@index']);
Route::get('{locale?}/{template?}/{page}', ['uses' => '\App\Http\Controllers\loadViewController@detail']);

Внутренние маршруты

Route::prefix('admin/dashboard')->group(function () {
  Route::get('/', 'DashboardController@index')->name('dashboard'); 
});

Теперь, когда я набираю admin / dashboard или api / admin, laravel использует маршруты внешнего интерфейса для загрузки представлений, в то время как я хочу, чтобы загружались представления внутреннего интерфейса.

Итак, чтобы отфильтровать внутренние маршруты, я попробовал это

Route::group(['where' => ['page' => '^(?!admin|api)$', 'template' => '^(?!admin|api)$']], function ({
  Route::get('{locale?}/', ['uses' => '\App\Http\Controllers\loadViewController@home']);
  Route::get('{locale?}/{page}', ['uses' => '\App\Http\Controllers\loadViewController@index']);
  Route::get('{locale?}/{template?}/{page}', ['uses' => '\App\Http\Controllers\loadViewController@detail']); 
});

, что явно не сработало

Также во внешних маршрутах не должно быть чего-то вроде / website , все они должны начинаться с /

Мой вопрос: как я могу загружать маршруты backend и frontend отдельно, не мешая при вызове, даже если они имеют одинаковую длину URL с точки зрения параметров, имейте в виду, что маршруты администратора всегда начинаются с / admin или / api.

Примечание: я не могу поставить внутренние маршруты перед внешними

Заранее спасибо!

Ответы [ 3 ]

1 голос
/ 16 июня 2020

Если вы хотите, вы можете наложить ограничение на параметр маршрута locale:

Route::pattern('locale', '^(?!(api|admin)$)(\w*)');

Вы можете поместить это в метод boot вашего RouteServiceProvider, и теперь он не позволит параметр маршрута locale для соответствия 'api' или 'admin'.

1 голос
/ 16 июня 2020

Вы можете зарегистрировать отдельные маршруты в RouteServiceProvider. Ниже показано, как это можно сделать.

Внутри RouteServiceProvider. php do:

public function map()
{
    $this->mapFrontendRoutes();

    $this->mapAdminRoutes();
}

Определение mapFrontendRoutes ():

protected function mapFrontendRoutes()
{
     Route::prefix('{locales?}')
         ->middleware('frontend')
         ->namespace($this->namespace.'\Frontend')
         ->group(base_path('routes/frontend.php'));
}

Определение mapAdminRoutes ( ):

protected function mapAdminRoutes()
{
     Route::prefix('admin')
         ->middleware('admin')
         ->namespace($this->namespace.'\Admin')
         ->group(base_path('routes/admin.php'));
}

Лично я считаю это очень полезным, помогает объявлять свободные от помех и логические маршруты. Открыт для отзывов.

0 голосов
/ 16 июня 2020

Самый простой способ - сгруппировать оба URL-адреса в отдельные группы. Пример следующего содержания:

Route::group(['prefix' => 'admin', 'as' => 'admin'], function () {
Route::post('/dashboard', 'AdminController@dashboard');

});

Route::group(['prefix' => 'home', 'as' => 'home'], function () {
Route::get('/record/{id}', 'HomeController@getRecord');

});

...