Класс контроллера не найден в Laravel 4

У меня есть следующая ошибка при попытке запустить мой контроллер

Класс контроллера не найден

У меня есть этот код в файле 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/ , вы должны гарантировать, что:

  1. Автозагрузка 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' . Он должен существовать.

  2. Также откройте файл 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 по умолчанию, вам необходимо выполнить один из следующих шагов. Однако, поскольку вы не определяете пространство имен в своем классе, похоже, что это не ваша проблема:

  1. Используйте 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 .

  2. Если вы не хотите использовать PSR-0 для автозагрузки, вам необходимо изменить файл маршрутов из этого

     Route::controller('cms','AdminCMSController'); 

    к этому:

     Route::controller('cms','Acme\controllers\AdminCMSController'); 

Если вы используете PSR-0, вам необходимо пропустить ваши классы следующим образом:

 <?php namespace Acme\controllers; class AdminCMSController extends BaseController { (...) } 

Любопытно, что ссылка Acme ? Я тоже. См. Википедию .