У меня есть следующая ошибка при попытке запустить мой контроллер
Класс контроллера не найден
У меня есть этот код в файле routes.php
Route::get('cms/create-page', 'AdminCMSController@create_page'); Route::post('cms/createpage','AdminCMSController@createpage'); Route::controller('cms','AdminCMSController');
И это код в моем контроллере
class AdminCMSController extends BaseController { public function create_page() { } public function createpage() { } }
Как я могу это исправить?
Если вы не переместили каталог controllers
из исходного местоположения (которое является «project_root»/app/controllers/
, вы должны гарантировать, что:
Автозагрузка Laravel имеет каталог controller
. Перейдите к «project_root»/app/start/global.php
. У вас должно быть что-то вроде этого:
(...) ClassLoader::addDirectories(array( app_path().'/commands', app_path().'/controllers', app_path().'/models', app_path().'/database/seeds', )); (...)
Обратите внимание на эту строку app_path().'/controllers'
. Он должен существовать.
Также откройте файл composer.json
и убедитесь, что существуют следующие строки:
(...) "autoload": { "classmap": [ "app/commands", "app/controllers", "app/database/migrations", "app/database/seeds", "app/tests/TestCase.php" ], (...)
Убедитесь, что у вас есть линия с app/controllers
Если у вас есть эти строки, и вы все равно получите одно и то же сообщение, перейдите в корневой каталог проекта и выполните следующую команду из composer dumpautoload -o
командной строки composer dumpautoload -o
.
Laravel работает с Composer , который является инструментом управления зависимостями для PHP. Он также подготавливает файл автозагрузки для всех ваших классов проектов ( см. Документатор-композитор ). Когда вы запустите команду composer dumpautoload
, она создаст некоторые файлы в «project_root»/vendor/composer
.
Убедитесь, что вы можете найти класс AdminCMSController
в файле «project_root»/vendor/composer/autoload_classmap.php
. Вы должны увидеть что-то вроде этого:
'AdminCMSController' => $baseDir . '/app/controllers/AdminCMSController.php',
Если вы изменили местоположение вашего каталога controllers
по умолчанию, вам необходимо выполнить один из следующих шагов. Однако, поскольку вы не определяете пространство имен в своем классе, похоже, что это не ваша проблема:
Используйте PSR-0 для автозагрузки классов. Представьте, что у вас есть следующая структура папок:
/app /commands /config /database /Acme /controllers
Вы должны указать папку Acme
в своем composer.json
, например:
"autoload": { "classmap": [ "app/commands", "app/database/migrations", "app/database/seeds", "app/tests/TestCase.php" ], "psr-0": { "Acme": "app/" } },
После этого вам нужно обновить файлы автозагрузки композитора с помощью команды composer dumpautoload
.
Если вы не хотите использовать PSR-0 для автозагрузки, вам необходимо изменить файл маршрутов из этого
Route::controller('cms','AdminCMSController');
к этому:
Route::controller('cms','Acme\controllers\AdminCMSController');
Если вы используете PSR-0, вам необходимо пропустить ваши классы следующим образом:
<?php namespace Acme\controllers; class AdminCMSController extends BaseController { (...) }
Любопытно, что ссылка Acme
? Я тоже. См. Википедию .