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 ?

141voto

Ja22 Points 879

Pour Laravel 5.3 et plus :

php artisan make:controller test/TestController

Cela créera le test s'il n'existe pas, puis crée TestController à l'intérieur.

TestController ressemblera à ceci :

<?php
namespace App\Http\Controllers\test;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class TestController extends Controller
{
    public function getTest()
    {
        return "Yes";
    }
}

Vous pouvez ensuite enregistrer votre itinéraire de cette manière :

Route::get('/test','test\TestController@getTest');

76voto

Ajoutez vos contrôleurs dans vos dossiers :

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

Créez votre itinéraire sans spécifier le dossier :

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

Exécuter

composer dump-autoload

Et réessayer

52voto

user2014679 Points 563

Pour ceux qui utilisent Laravel 5, vous devez définir l'espace de nom du contrôleur dans le sous-répertoire (Laravel 5 est toujours en cours de développement et des changements sont apportés quotidiennement).

Pour obtenir une structure de dossier comme :

Http
----Controllers
    ----Admin
            PostsController.php
    PostsController.php

namespace Admin \PostsController.php comme ceci :

<?php namespace App\Http\Controller\Admin;

use App\Http\Controllers\Controller;

class PostsController extends Controller {

    //business logic here
}

Alors votre itinéraire pour cela est :

$router->get('/', 'Admin\PostsController@index');

Et enfin, ne faites pas le choix entre le compositeur et l'artisan.

composer dump-autoload

ou

php artisan dump

19voto

Ariful Haque Points 1786

Pour ** Laravel 5 ou Laravel 5.1 LTS les deux **, si vous avez plusieurs contrôleurs dans le dossier Admin, Route::group sera vraiment utile pour vous. Par exemple :

Mise à jour : Fonctionne avec Laravel 5.4

La structure de mon dossier :

Http
----Controllers
    ----Api
          ----V1
                 PostsApiController.php
                 CommentsApiController.php
    PostsController.php

PostAPIController :

<?php namespace App\Http\Controllers\Api\V1;

use App\Http\Requests;
use App\Http\Controllers\Controller;   
use Illuminate\Http\Request;

class PostApiController extends Controller {  
...

Dans mon Route.php, j'ai mis namespace groupe à Api\V1 et dans l'ensemble, ça ressemble à :

Route::group(
        [           
            'namespace' => 'Api\V1',
            'prefix' => 'v1',
        ], function(){

            Route::get('posts', ['uses'=>'PostsApiController@index']);
            Route::get('posts/{id}', ['uses'=>'PostssAPIController@show']);

    });

Pour plus de détails sur la création d'un sous-dossier, consultez cette page. lien .

9voto

Mervyn Points 89

1.créez votre sous-dossier comme suit :

app
----controllers
--------admin
--------home

2.configurer votre code dans app/routes.php

<?php
// index
Route::get('/', 'Home\HomeController@index');

// admin/test
Route::group(
    array('prefix' => 'admin'), 
    function() {
        Route::get('test', 'Admin\IndexController@index');
    }
);
?>

3.écrire qqch dans app/controllers/admin/IndexController.php, par exemple :

<?php
namespace Admin;

class IndexController extends \BaseController {

    public function index()
    {
        return "admin.home";
    }
}
?>

4.accédez à votre site,eglocalhost/admin/test vous verrez "admin.home" sur la page

ps : Veuillez ignorer mon mauvais anglais

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