lumen: App \ Http \ Controllers \ Класс контроллера не найден с новой установкой

Я работаю со свежей установкой Lumen (создание веб-API), большинство вещей работает, но когда я пытаюсь использовать маршрутизатор для указания класса, я получаю эту ошибку:

Fatal error: Class 'App\Http\Controllers\Controller' not found in /Applications/MAMP/htdocs/moments/lumen/app/Http/Controllers/MomentController.php on line 5 

Это мой маршрутизатор в приложении / Http / routes.php

 $app->get('/', 'MomentController@index'); 

И это мой класс в приложении / Http / Controllers / MomentController.php

 <?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; class MomentController extends Controller { public function index() { echo 123; } } 

Я активировал эти компоненты в bootstrap / app.php :

  • $app->withFacades();
  • $app->withEloquent();
  • Dotenv::load(__DIR__.'/../');

Это мой файл composer.json :

     { "name": "laravel/lumen", "description": "The Laravel Lumen Framework.", "keywords": ["framework", "laravel", "lumen"], "license": "MIT", "type": "project", "require": { "laravel/lumen-framework": "5.1.*", "vlucas/phpdotenv": "~1.0" }, "require-dev": { "phpunit/phpunit": "~4.0", "fzaninotto/faker": "~1.0" }, "autoload": { "psr-4": { "App\\": "app/" }, "classmap": [ "database/" ] }, "autoload-dev": { "classmap": [ "tests/" ] }, "config": { "preferred-install": "dist" } } 

    Я думаю, что это имеет какое-то отношение к пространству имен, но я не могу понять это. Любые подсказки?

    спасибо,

    Related of "lumen: App \ Http \ Controllers \ Класс контроллера не найден с новой установкой"

    Увы, никто из них не работает. Я не могу взять кредит на решение, но если вы пришли сюда в поисках рабочего ответа, пожалуйста, воздержитесь от этого. Оригинальное сообщение от Lukas Geiter здесь: routing framework routing not working

    Я изменил пример foo / bar, потому что действительно, кому это нравится?


    Вы должны использовать полное имя класса:

     $app->get('/', 'App\Http\Controllers\HomeController@index'); 

    ИЛИ заверните все маршруты в группе (это на самом деле то, как это делается под капотом в Laravel 5)

     $app->group(['namespace' => 'App\Http\Controllers'], function($group){ $group->get('/', 'HomeController@index'); $group->get('users', 'UserController@index'); }); 

    Решение состоит в том, чтобы ссылаться на правый базовый контроллер, чтобы он мог распространяться на этот класс.

     use Laravel\Lumen\Routing\Controller as BaseController; 

    Эта строка – единственная вещь, которую я должен был добавить, чтобы она работала.

    Таким образом, полный класс становится следующим:

     <?php namespace App\Http\Controllers; use Laravel\Lumen\Routing\Controller as BaseController; class ChannelController extends BaseController { public function getChannels(){} public function getChannel(){} } 

    Я полагаю, что вы создали проект с использованием lumen new вместо composer create-project laravel/lumen --prefer-dist . Вы можете попытаться создать новый проект просвета с использованием композитора и попытаться воспроизвести эту проблему.

    Удалите use App\Http\Controllers\Controller; поскольку в этом нет необходимости.

    Затем проверьте, включен ли у вашего композитора.json psr-4 для каталога app .

    Кроме того, попробуйте composer du в командной строке, чтобы сбросить и восстановить файл автозагрузки.

    Для кого-то еще, кто оказался здесь с той же проблемой. Я столкнулся с такой же проблемой, выполняя мои маршруты в рамках моей новой установки Lumen 5.2.

    После нескольких часов поиска в Интернете выясняется, что контроллер маршрута Lumen отличается от используемого Laravel. Lumen использует nikic fastroute.

    Контроллер маршрута Lumen НЕ поддерживает префикс группы маршрутов, даже если он указан в документации для Lumen. Я не знаю, была ли это проблема оригинального плаката, поскольку полная информация о маршруте недоступна, но, надеюсь, она спасет кого-то еще несколько часов.

    Я не смог найти ссылку, если это функция, которую нужно включить / добавить вручную (если Lumen теперь поддерживает ее, как предлагает документация). Может быть, кто-то может пролить свет на это?

    https://lumen.laravel.com/docs/5.2/routing#route-group-prefixes

    попробуй это

     $app->get('/', 'App\Http\Controllers\MomentController@index'); 

    или (лучше) группировать их

     $app->group(['namespace' => 'App\Http\Controllers'], function($group){ $group->get('/', 'MomentController@index'); $group->get('foo', 'MomentController@otherAction'); }); 

    и удалите use App\Http\Controllers\Controller; как сказал @lowerends