У меня есть следующая ошибка при попытке запустить мой контроллер
Класс контроллера не найден
У меня есть этот код в файле 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 ? Я тоже. См. Википедию .