1
votes

Chargez les routes backend et frontend séparément sans interférer

J'ai deux types de routes, les routes administratives et les routes frontales.

Les routes frontales

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']); 
});

Les routes backend

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


1 commentaires

Vous pouvez jeter un œil aux contraintes des expressions régulières et essayer d'utiliser une contrainte where pour obtenir toutes les routes qui ont "admin / *" . J'espère que cela aide. laravel.com/docs/7.x/…


3 Réponses :


0
votes

Le moyen le plus simple est de regrouper les deux URL en groupes séparés. Exemple comme suit:

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

});

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

});


1 commentaires

Ouais, mais je ne veux pas d'itinéraires commençant par / home. Merci pour la réponse



1
votes

Si vous le souhaitez, vous pouvez mettre une contrainte sur le paramètre de route locale :

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

Vous pouvez mettre cela dans le boot méthode de votre RouteServiceProvider et il ne permettra plus au paramètre de route locale de correspondre à 'api' ou 'admin' code>.


0 commentaires

1
votes

Vous pouvez enregistrer des itinéraires séparés dans RouteServiceProvider. Voici comment vous pouvez le faire.

Dans RouteServiceProvider.php, faites:

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

Définition de mapFrontendRoutes ():

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

Définition de mapAdminRoutes ():

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

    $this->mapAdminRoutes();
}

Personnellement, je trouve cela très utile, aide à déclarer des routes logiques et sans interférence. Ouvert aux commentaires.


5 commentaires

Cela n'a pas fonctionné exactement, mais c'est bien pour maintenir la structure :)


Recevez-vous une erreur? Ou ce n'est pas conforme au cas d'utilisation que vous recherchez? Je peux essayer de t'aider


Cela n'affecte pas la vue chargée. Peut-être trouvez-vous ce dépôt utile github.com/rappasoft/laravel- passe-partout / blob / master / routes / ‌…


Voulez-vous donc charger différents ViewControllers en fonction des groupes de routes, n'est-ce pas?


Ouais, j'ai besoin d'un filtre qui lit l'url comme -> where ('page', 'home');