Jestem nowy w Laravel. Aby zachować porządek w mojej aplikacji, chciałbym umieścić moje kontrolery w podfolderach folderu kontrolera.
controllers\
---- folder1
---- folder2
Próbowałem skierować się do kontrolera, ale laravel go nie znajduje.
Route::get('/product/dashboard', 'folder1.MakeDashboardController@showDashboard');
Co ja robię źle?
php artisan make:controller test\TestController
tworzy testTestController.php, podczas gdyphp artisan make:controller 'test\TestController'
działa. (Zwróć uwagę na cytaty) - Laravel 5.4php artisan make:controller test/TestController
Dodaj kontrolery do swoich folderów:
Utwórz trasę, nie określając folderu:
Route::get('/product/dashboard', 'MakeDashboardController@showDashboard');
Biegać
I spróbuj ponownie
źródło
artisan dump-autoload
też potrzebujesz, czycomposer dump-autoload
wystarczy?ClassLoader::addDirectories
, czego nie masz na temat kompozytora, będziesz też potrzebować rzemieślnika.composer dump-autoload
pracuj też dla mnie. Jeśli używasz systemu operacyjnego Windows, możesz użyć pliku .bat do uruchomieniacomposer dump-autoload
zamiast wpisywania CMD za każdym razem. Oto czego używam:PUSHD "E:\path\to\non-public" newline START /B "Window 1" composer dump-autoload newline pause
Dla tych, którzy używają Laravel 5, musisz ustawić przestrzeń nazw dla kontrolera w podkatalogu (Laravel 5 jest wciąż w fazie rozwoju i zmiany zachodzą codziennie)
Aby uzyskać strukturę folderów, taką jak:
namespace Admin \ PostsController.php tak:
<?php namespace App\Http\Controller\Admin; use App\Http\Controllers\Controller; class PostsController extends Controller { //business logic here }
Twoja trasa to:
$router->get('/', 'Admin\PostsController@index');
I na koniec, nie rób tego ani kompozytora, ani rzemieślnika
lub
źródło
App\Http\Controllers\Auth\Controller
nie znaleziono, dlaczego dołącza tam słowoController
i traci rzeczywistą nazwę kontrolera? Myślę, że to slash, który to robi.-o
nie pomogło.Dla ** Laravel 5 lub Laravel 5.1 LTS, oba **, jeśli masz wiele kontrolerów w folderze Admin,
Route::group
będą dla Ciebie bardzo pomocne. Na przykład:Aktualizacja : działa z Laravel 5.4
Struktura mojego folderu:
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 { ...
W My Route.php ustawiam
namespace
grupę naApi\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ółowe informacje dotyczące przenoszenia, aby utworzyć podfolder, odwiedź ten link .
źródło
1. utwórz swój podfolder w następujący sposób:
2. skonfiguruj swój kod w app / tours.php
<?php // index Route::get('/', 'Home\HomeController@index'); // admin/test Route::group( array('prefix' => 'admin'), function() { Route::get('test', 'Admin\IndexController@index'); } ); ?>
3. napisz coś w app / controllers / admin / IndexController.php, np .:
<?php namespace Admin; class IndexController extends \BaseController { public function index() { return "admin.home"; } } ?>
4. uzyskaj dostęp do swojej witryny, np. : Localhost / admin / test, zobaczysz na stronie „admin.home”
ps: Proszę zignorować mój słaby angielski
źródło
Właśnie znalazłem sposób, jak to zrobić:
Po prostu dodaj ś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', ));
źródło
Tutaj admin to podkatalog w app / Http / Controllers, a CategoryController to kontroler, który chcesz utworzyć w katalogu
źródło
W Laravel 5.6, zakładając, że nazwa twojego podfolderu to
Api
:W kontrolerze potrzebujesz tych dwóch wierszy:
namespace App\Http\Controllers\Api; use App\Http\Controllers\Controller;
W pliku trasy
api.php
potrzebujesz:Route::resource('/myapi', 'Api\MyController');
źródło
Używam Laravel 4.2. Oto jak to robię:
mam strukturę katalogów taką jak ta:
app
--controllers
---- admin
------ AdminController.php
Po utworzeniu kontrolera umieściłem w pliku composer.json ścieżkę do nowego katalogu administratora:
"autoload": { "classmap": [ "app/commands", "app/controllers", "app/controllers/admin", "app/models", "app/database/migrations", "app/database/seeds", "app/tests/TestCase.php" ] },
Następnie pobiegłem
i wtedy
Następnie w route.php mam kontroler zawarty w ten sposób:
Route::controller('admin', 'AdminController');
I wszystko działa dobrze.
źródło
1) W ten sposób możesz zorganizować swoją aplikację:
Każdy plik trasy (
web.php
,api.php
...) jest zadeklarowany wmap()
metodzie w plikuPodczas mapowania pliku trasy możesz ustawić
->namespace($this->namespace)
dla niego znak , zobaczysz go tam wśród przykładów.Oznacza to, że możesz tworzyć więcej plików, aby projekt był bardziej uporządkowany!
I ustaw różne przestrzenie nazw dla każdego z nich.
Ale ja wolę ustawić
empty string
dla przestrzeni nazw""
2) Możesz ustawić swoje kontrolery na routing w natywny sposób php, zobacz przykład:
Route::resource('/users', UserController::class); Route::get('/agents', [AgentController::class, 'list'])->name('agents.list');
Teraz możesz dwukrotnie kliknąć nazwy kontrolerów w swoim IDE, aby szybko i wygodnie się tam dostać.
źródło
Jeśli używasz Laravel 5.3 lub nowszego, nie ma potrzeby wchodzenia w tak dużą złożoność, jak powiedziały inne odpowiedzi. Po prostu użyj domyślnego polecenia artisan, aby wygenerować nowy kontroler. Na przykład, jeśli chcę utworzyć
User
kontroler wUser
folderze. PisałbymNa trasach
Route::get('/dashboard', 'User\User@dashboard');
wystarczyłoby to zrobić, a teraz na localhost / dashboard znajduje się strona.
Mam nadzieję że to pomoże.
źródło
Myślę, że aby zachować kontrolery Admin i Front w osobnych folderach, przestrzeń nazw będzie działać dobrze.
Proszę spojrzeć na poniższą strukturę katalogów Laravel, która działa dobrze dla mnie.
Trasy w pliku „route / web.php” wyglądałyby 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 Administracja będzie to wyglądać
/* 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!!
źródło
Niedawno miałem ten problem z laravelem 5.8, ale nie doceniam, że powinienem poprawnie zdefiniować kontroler, jak poniżej:
php artisan make:controller SubFolder\MyController // true
Nie tak jak to:
php artisan make:controller SubFolder/MyController // false
Następnie możesz uzyskać dostęp do kontrolera w route / web.php w następujący sposób:
Route::get('/my', 'SubFolder\MyController@index');
źródło