Routing podfolderu kontrolera Laravel

Jestem nowy w Laravel. Aby spróbować utrzymać porządek w aplikacji, chciałbym umieścić Kontrolery w podfolderach folderu kontroler.

controllers\
---- folder1
---- folder2
Próbowałem dotrzeć do kontrolera, ale laravel go nie znalazł.
Route::get('/product/dashboard', 'folder1.MakeDashboardController@showDashboard');
Co robię źle?
Author: Burak, 2013-09-17

11 answers

Dla Laravel 5.3 powyżej

php artisan make:controller test/TestController

To utworzy folder testowy, jeśli nie istnieje, a następnie utworzy TestController wewnątrz.

TestController będzie wyglądać tak:

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

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

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

W trasach,

Route::get('/test','test\TestController@getTest');
 47
Author: Ja22,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-19 13:56:18

Dodaj swoje Kontrolery do folderów:

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

Utwórz trasę bez podania folderu:

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

Run

composer dump-autoload

I spróbuj ponownie

 65
Author: Antonio Carlos Ribeiro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-17 13:07:26

Dla tych, którzy używają Laravel 5, musisz ustawić przestrzeń nazw dla kontrolera w podkatalogu (Laravel 5 jest nadal w fazie rozwoju i zmiany zachodzą codziennie)

Aby uzyskać strukturę folderów jak:

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

Przestrzeń Nazw Admin\PostsController.plik php jak tak:

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

use App\Http\Controllers\Controller;

class PostsController extends Controller {

    //business logic here
}

Wtedy Twoja trasa to:

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

I na koniec, nie rób ani kompozytora, ani rzemieślnika zrzutu

composer dump-autoload

Lub

php artisan dump
 46
Author: user2014679,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-15 07:23:15

1.utwórz swój podfolder tak jak w następującej treści:

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

2.skonfiguruj kod w aplikacji / trasach.php

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

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

3.Zapisz sth w app / controllers/admin / IndexController.php, np:

<?php
namespace Admin;

class IndexController extends \BaseController {

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

4.dostęp do witryny, np: localhost / admin / test zobaczysz "admin.Strona główna " na stronie

Ps: Proszę ignoruj mój biedny angielski

 9
Author: Mervyn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-26 07:12:59

Dla * * Laravel 5 lub Laravel 5.1 LTS oba**, jeśli masz wiele kontrolerów w folderze Admin, Route::group będzie bardzo pomocny dla Ciebie. Na przykład:

Moja struktura folderów:

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 {  
...
Na Mojej Drodze.php, ustawiłem namespace group na Api\V1 i ogólnie wygląda to tak:
Route::group(
        [           
            'namespace' => 'Api\V1',
            'prefix' => 'v1',
        ], function(){

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

    });

Aby uzyskać szczegóły dotyczące przeniesienia, aby utworzyć podfolder, odwiedź poniżej link: https://laracasts.com/discuss/channels/general-discussion/reflectionexception-class-apphttpcontrollersadminadmincontroller-does-not-exist

 6
Author: Ariful Haque,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-15 06:55:49
php artisan make:controller admin/CategoryController

Tutaj admin jest podkatalogiem pod app / Http / Controllers i CategoryController jest kontrolerem, który chcesz utworzyć wewnątrz katalogu

 6
Author: Dipen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-08 02:01:24

Just found a way how to do it:

Wystarczy dodać ścieżki do /app / start / global.php

ClassLoader::addDirectories(array(

    app_path().'/commands',
    app_path().'/controllers',
    app_path().'/controllers/product',
    app_path().'/models',
    app_path().'/database/seeds',

));
 5
Author: Tino,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-17 13:19:18

Używam Laravel 4.2. Oto jak to robię:
Mam taką strukturę katalogów jak Ta:
app
-- Kontrolery
---- admin
------ AdminController.php

Po stworzeniu kontrolera umieściłem w composerze.json ścieżka do nowego katalogu admina:

"autoload": {
"classmap": [
"app/commands",
"app/controllers",
"app/controllers/admin",
"app/models",
"app/database/migrations",
"app/database/seeds",
"app/tests/TestCase.php"
]
}, 

Następny biegnę

composer dump-autoload

A następnie

php artisan dump-autoload

Następnie w trasach.php mam w zestawie kontroler Tak:

Route::controller('admin', 'AdminController');
I wszystko działa dobrze.
 5
Author: TodStoychev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-07 12:49:48

Jeśli używasz Laravel 5.3 lub nowszego, nie ma potrzeby, aby wchodzić w tak wiele złożoności, jak inne odpowiedzi powiedziały. Wystarczy użyć domyślnego polecenia artisan, aby wygenerować nowy kontroler. Na przykład, jeśli chcę utworzyć kontroler User w folderze User. Ja bym napisał

php artisan make:controller User/User

W trasach,

Route::get('/dashboard', 'User\User@dashboard');

Robienie tego byłoby w porządku, a teraz na localhost/dashboard znajduje się strona.

Mam nadzieję, że to pomoże.
 4
Author: Koushik Das,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-24 02:25:40

W Laravel 5.6, zakładając, że nazwa Twojego podfolderu ' to Api:

W kontrolerze potrzebujesz tych dwóch linii:

namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;

I w pliku trasy api.php Potrzebujesz:

Route::resource('/myapi', 'Api\MyController');
 3
Author: maxagaz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-21 13:13:52

Myślę, że aby utrzymać kontrolery dla admina i Front w oddzielnych folderach, przestrzeń nazw będzie działać dobrze.

Proszę spojrzeć na poniższą strukturę katalogów Laravel, która działa dobrze dla mnie.

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

Trasy w "routes / web.php " plik będzie jak poniżej

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

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

A Dla sekcji Admin będzie to wyglądało tak:

/* 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']);                                   
    });
});
Mam nadzieję, że to pomoże!!
 2
Author: Mahesh Yadav,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-18 11:03:35