Что Laravel папку контроллер маршрутизации
Я новичок в Laravel. Чтобы попытаться сохранить мое приложение организованным, я хотел бы поместить мои контроллеры во вложенные папки папки контроллера.
controllers
---- folder1
---- folder2
Я пытался направить к контроллеру, но laravel не находит его.
Route::get('/product/dashboard', 'folder1.MakeDashboardController@showDashboard');
что я делаю не так?
11 ответов:
для Laravel 5.3 выше
php artisan make:controller test/TestControllerэто создаст тестовую папку, если она не существует, а затем создает
TestControllerвнутри.
TestControllerбудет выглядеть так:<?php namespace App\Http\Controllers\test; use Illuminate\Http\Request; use App\Http\Controllers\Controller; class TestController extends Controller { public function getTest() { return "Yes"; } } ?>в маршрутах,
Route::get('/test','test\TestController@getTest');
добавьте контроллеры в свои папки:
controllers\ ---- folder1 ---- folder2создать свой маршрут, не указав папку:
Route::get('/product/dashboard', 'MakeDashboardController@showDashboard');выполнить
composer dump-autoloadи попробуйте снова
для тех, кто использует Laravel 5, вам нужно установить пространство имен для контроллера в подкаталоге (Laravel 5 все еще находится в разработке, и изменения происходят ежедневно)
чтобы получить структуру папок, как:
Http ----Controllers ----Admin PostsController.php PostsController.phpnamespace Admin\PostsController.файл php вот так:
<?php namespace App\Http\Controller\Admin; use App\Http\Controllers\Controller; class PostsController extends Controller { //business logic here }тогда ваш маршрут для этого:
$router->get('/', 'Admin\PostsController@index');и, наконец, не для того, чтобы сделать либо композитор или ремесленник дамп
composer dump-autoloadили
php artisan dump
1.создайте свою подпапку так же, как следующие:
app ----controllers --------admin --------home2.настройка кода в приложении / маршрутах.php
<?php // index Route::get('/', 'Home\HomeController@index'); // admin/test Route::group( array('prefix' => 'admin'), function() { Route::get('test', 'Admin\IndexController@index'); } ); ?>3.напишите sth в app / controllers/admin / IndexController.php, например:
<?php namespace Admin; class IndexController extends \BaseController { public function index() { return "admin.home"; } } ?>4.доступ к сайту, например: localhost / admin / test вы увидите "админ.главная" на странице
ps: Пожалуйста, игнорируйте Мой бедный английский
для * * Laravel 5 или Laravel 5.1 LTS оба **, если у вас есть несколько контроллеров в папке администратора,
Route::groupбудет очень полезно для вас. Например:моя структура папок:
Http ----Controllers ----Api ----V1 PostsApiController.php CommentsApiController.php PostsController.phpPostAPIController:
<?php namespace App\Http\Controllers\Api\V1; use App\Http\Requests; use App\Http\Controllers\Controller; use Illuminate\Http\Request; class PostApiController extends Controller { ...В Моем Маршруте.php, я установил
namespaceгруппыApi\V1и в целом это выглядит так:Route::group( [ 'namespace' => 'Api\V1', 'prefix' => 'v1', ], function(){ Route::get('posts', ['uses'=>'PostsApiController@index']); Route::get('posts/{id}', ['uses'=>'PostssAPIController@show']); });для перемещения деталей, чтобы создать вложенную папку, посетите ниже ссылка на сайт: https://laracasts.com/discuss/channels/general-discussion/reflectionexception-class-apphttpcontrollersadminadmincontroller-does-not-exist
php artisan make:controller admin/CategoryControllerздесь admin-это подкаталог под app / Http / Controllers и CategoryController-это контроллер, который вы хотите создать внутри каталога
просто нашел способ как это сделать:
просто добавьте пути к /app/start / global.php
ClassLoader::addDirectories(array( app_path().'/commands', app_path().'/controllers', app_path().'/controllers/product', app_path().'/models', app_path().'/database/seeds', ));
Я использую Laravel 4.2. Вот как я это делаю:
У меня есть структура каталогов, как это:
приложение
--контроллеры
----админ
------AdminController.phpпосле того, как я создал контроллер я поставил композитора.json путь к новому каталогу администратора:
"autoload": { "classmap": [ "app/commands", "app/controllers", "app/controllers/admin", "app/models", "app/database/migrations", "app/database/seeds", "app/tests/TestCase.php" ] },далее я побежал
composer dump-autoloadа то
php artisan dump-autoloadзатем в стороны.php у меня есть контроллер, включенный следующим образом:
Route::controller('admin', 'AdminController');и все работает нормально.
если вы используете Laravel 5.3 или выше, вам не нужно так много усложнять, как говорили другие ответы. Просто используйте команду ремесленника по умолчанию для создания нового контроллера. Например, если я хочу создать . Я бы набрал
php artisan make:controller User/Userв маршрутах,
Route::get('/dashboard', 'User\User@dashboard');делать только это было бы хорошо, и теперь на localhost/dashboard находится страница.
надеюсь, что это помогает.
в Laravel 5.6, предполагая, что имя вашей подпапки ' является
Api:в вашем контроллере вам нужны эти две строки:
namespace App\Http\Controllers\Api; use App\Http\Controllers\Controller;и в вашем маршруте файлом
api.phpнеобходимо:Route::resource('/myapi', 'Api\MyController');
Я думаю, чтобы сохранить контроллеры для Admin и Front в отдельных папках, пространство имен будет работать хорошо.
пожалуйста, посмотрите на приведенную ниже структуру каталогов Laravel, которая отлично работает для меня.
app --Http ----Controllers ------Admin --------DashboardController.php ------Front --------HomeController.phpмаршруты в разделе " Маршруты / web.php " файл будет, как показано ниже
/* All the Front-end controllers routes will work under Front namespace */ Route::group(['namespace' => 'Front'], function () { Route::get('/home', 'HomeController@index'); });и для админ раздела, это будет выглядеть как
/* 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']); }); });надеюсь, что это помогает!!
Comments