Я новичок в Laravel. Чтобы попытаться сохранить свое приложение организованным, я хотел бы поместить свои контроллеры во вложенные папки папки контроллеров.
controllers\
---- folder1
---- folder2
Я попытался перейти к контроллеру, но laravel его не находит.
Route::get('/product/dashboard', 'folder1.MakeDashboardController@showDashboard');
Что я делаю не так?
php artisan make:controller test\TestController
создает testTestController.php, аphp artisan make:controller 'test\TestController'
работает. (Обратите внимание на цитаты) - Laravel 5.4php artisan make:controller test/TestController
Добавьте свои контроллеры в свои папки:
Создайте свой маршрут без указания папки:
Route::get('/product/dashboard', 'MakeDashboardController@showDashboard');
Бегать
И попробуй еще раз
источник
artisan dump-autoload
тоже нужно илиcomposer dump-autoload
достаточно?ClassLoader::addDirectories
то, чего нет у композитора, вам также понадобится ремесленник.composer dump-autoload
у меня тоже работает. Если вы используете ОС Windows, вы можете использовать файл .bat для запускаcomposer dump-autoload
вместо того, чтобы каждый раз вводить CMD. Вот что я использую:PUSHD "E:\path\to\non-public" newline START /B "Window 1" composer dump-autoload newline pause
Для тех, кто использует Laravel 5, вам необходимо установить пространство имен для контроллера в подкаталоге (Laravel 5 все еще находится в разработке, и изменения происходят ежедневно)
Чтобы получить такую структуру папок:
пространство имен 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');
И, наконец, не надо делать ни композиторскую, ни кустарную свалку.
или
источник
App\Http\Controllers\Auth\Controller
не найдено, почему там добавлено словоController
и теряется фактическое имя контроллера? Я думаю, что это делает косая черта.-o
не помогло.Для ** Laravel 5 или Laravel 5.1 LTS оба **, если у вас есть несколько контроллеров в папке администратора, вам
Route::group
будет очень полезно. Например:Обновление : работает с Laravel 5.4
Моя структура папки:
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 { ...
В My Route.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']); });
Для получения сведений о перемещении для создания подпапки перейдите по этой ссылке .
источник
1. создайте свою подпапку, как показано ниже:
2. настройте свой код в 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. напишите sth в app / controllers / admin / IndexController.php, например:
<?php namespace Admin; class IndexController extends \BaseController { public function index() { return "admin.home"; } } ?>
4. войдите на свой сайт, например : localhost / admin / test, вы увидите на странице «admin.home»
ps: пожалуйста, не обращайте внимания на мой плохой английский
источник
Только что нашел способ как это сделать:
Просто добавьте пути в /app/start/global.php
ClassLoader::addDirectories(array( app_path().'/commands', app_path().'/controllers', app_path().'/controllers/product', app_path().'/models', app_path().'/database/seeds', ));
источник
Здесь admin - это подкаталог в app / Http / Controllers, а CategoryController - это контроллер, который вы хотите создать внутри каталога.
источник
В Laravel 5.6 предполагается, что имя вашей подпапки '
Api
:В вашем контроллере вам понадобятся эти две строки:
namespace App\Http\Controllers\Api; use App\Http\Controllers\Controller;
И в вашем файле маршрута
api.php
вам нужно:Route::resource('/myapi', 'Api\MyController');
источник
Я использую Laravel 4.2. Вот как я это делаю: у
меня есть такая структура каталогов:
app
--controllers
---- admin
------ AdminController.php
После того, как я создал контроллер, я ввел composer.json путь к новому каталогу администратора:
"autoload": { "classmap": [ "app/commands", "app/controllers", "app/controllers/admin", "app/models", "app/database/migrations", "app/database/seeds", "app/tests/TestCase.php" ] },
Далее я побежал
а потом
Затем в routes.php я включил контроллер следующим образом:
Route::controller('admin', 'AdminController');
И все нормально работает.
источник
1) Вот как вы можете организовать свое приложение:
Каждый файл маршрута (
web.php
,api.php
...) объявляется вmap()
методе в файлеПри отображении файла маршрута вы можете установить
->namespace($this->namespace)
для него, вы увидите его там среди примеров.Это означает, что вы можете создать больше файлов, чтобы сделать свой проект более структурированным!
И установите для каждого из них разные пространства имен.
Но я предпочитаю установить
empty string
для пространства имен""
2) Вы можете настроить свои контроллеры на маршрутизацию нативным способом php, см. Пример:
Route::resource('/users', UserController::class); Route::get('/agents', [AgentController::class, 'list'])->name('agents.list');
Теперь вы можете дважды щелкнуть имена контроллеров в своей среде IDE, чтобы попасть туда быстро и удобно.
источник
Если вы используете Laravel 5.3 или выше, нет необходимости вдаваться в такую сложность, как сказано в других ответах. Просто используйте команду artisan по умолчанию для создания нового контроллера. Например, если я хочу создать
User
контроллер вUser
папке. Я бы напечаталВ маршрутах,
Route::get('/dashboard', 'User\User@dashboard');
это было бы нормально, и теперь на localhost / dashboard находится страница.
Надеюсь это поможет.
источник
Я думаю, что если держать контроллеры для Admin и Front в отдельных папках, пространство имен будет работать нормально.
Пожалуйста, посмотрите на приведенную ниже структуру каталогов Laravel, она мне подходит.
Маршруты в файле "routes / 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']); }); });
Надеюсь это поможет!!
источник
Недавно у меня была эта проблема с laravel 5.8, но я недооцениваю, что я должен правильно определить контроллер, как показано ниже:
php artisan make:controller SubFolder\MyController // true
Не так:
php artisan make:controller SubFolder/MyController // false
Затем вы можете получить доступ к контроллеру в routes / web.php следующим образом:
Route::get('/my', 'SubFolder\MyController@index');
источник
В моем случае у меня был префикс, который нужно было добавить для каждого маршрута в группе, в противном случае ответом было бы, что класс UserController не найден.
Route::prefix('/user')->group(function() { Route::post('/login', [UserController::class, 'login'])->prefix('/user'); Route::post('/register', [UserController::class, 'register'])->prefix('/user'); });
источник