110 votes

Routage des sous-dossiers du contrôleur Laravel

Je suis nouveau sur Laravel. Pour essayer de garder mon application organisée, je voudrais placer mes contrôleurs dans des sous-dossiers du dossier contrôleur.

controllers\
---- folder1
---- folder2

J'ai essayé de router vers un contrôleur, mais Laravel ne le trouve pas.

Route::get('/product/dashboard', 'folder1.MakeDashboardController@showDashboard');

Qu'est-ce que je fais de mal ?

5voto

1) C'est ainsi que vous pouvez organiser votre application :

Chaque fichier de route ( web.php , api.php ...) est déclaré dans un map() dans un fichier

\app\Providers\RouteServiceProvider.php

Lorsque vous mappez un fichier de route, vous pouvez définir une ->namespace($this->namespace) pour le trouver, vous le verrez là parmi les exemples.

Cela signifie que vous pouvez créer plus de fichiers pour rendre votre projet plus structuré !

Et définissez des espaces de noms différents pour chacun d'eux.

Mais je préfère l'ensemble empty string pour l'espace de nom ""

2) Vous pouvez configurer vos contrôleurs pour qu'ils routent de manière native en php, voir l'exemple :

Route::resource('/users', UserController::class);
Route::get('/agents', [AgentController::class, 'list'])->name('agents.list');

Vous pouvez maintenant double-cliquer sur les noms de vos contrôleurs dans votre IDE pour y accéder rapidement et facilement.

3voto

Mahesh Yadav Points 382

Je pense que pour garder les contrôleurs pour Admin et Front dans des dossiers séparés, l'espace de noms fonctionnera bien.

Veuillez regarder la structure de répertoire Laravel ci-dessous, qui fonctionne bien pour moi.

app
--Http
----Controllers
------Admin
--------DashboardController.php
------Front
--------HomeController.php

Les routes dans le fichier "routes/web.php" sont les suivantes

/* All the Front-end controllers routes will work under Front namespace */

Route::group(['namespace' => 'Front'], function () {
    Route::get('/home', 'HomeController@index');
});

Et pour la section Admin, cela ressemblera à

/* All the admin routes will go under Admin namespace */
/* All the admin routes will required authentication, 
   so an middleware auth also applied in admin namespace */

Route::group(['namespace' => 'Admin'], function () {
    Route::group(['middleware' => ['auth']], function() {            
        Route::get('/', ['as' => 'home', 'uses' => 'DashboardController@index']);                                   
    });
});

J'espère que cela vous aidera !

2voto

ucheN Points 121

Ceci est pour laravel 9.

  1. Organisez vos contrôleurs dans des sous-dossiers comme vous le souhaitez :
    contrôleur
    --Dossier-1
    ------controllerA
    ------controllerB
    ---dossier-2
    ------controllerC
    ------controllerD
  2. utiliser les contrôleurs dans le fichier de route
    utiliser l'application \Http\controllers\folder -1 \controllerA ;
    .....etc
  3. Rédigez vos itinéraires comme d'habitude
    Route::get('/xyz', [controllerA::class, 'methodName']) ;

1voto

Foad Points 592

J'ai eu ce problème récemment avec Laravel 5.8 mais j'ai compris que je devais définir le contrôleur de la bonne manière, comme ci-dessous :

php artisan make:controller SubFolder\MyController  // true

Pas comme ça :

php artisan make:controller SubFolder/MyController  // false

Ensuite, vous pouvez accéder au contrôleur dans routes/web.php comme ceci :

Route::get('/my', 'SubFolder\MyController@index');

0voto

askepott Points 139

Dans mon cas, j'avais un préfixe qui devait être ajouté pour chaque route dans le groupe, sinon la réponse serait que la classe UserController n'a pas été trouvée.

Route::prefix('/user')->group(function() {
    Route::post('/login', [UserController::class, 'login'])->prefix('/user');
    Route::post('/register', [UserController::class, 'register'])->prefix('/user');
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X