Подтвердить что ты не робот

Symfony2: Поиск маршрута "GET/lucky/number" не найден.

Я начинаю учебник (как новичок), и все отлично работает до:

http://symfony.com/doc/current/book/page_creation.html#creating-a-page-route-and-controller на этапе создания страницы: Маршрут и контроллер

Я создал файл под названием /var/www/html/[projekt]/src/AppBundle/Controller/LuckyController.php

но когда я открываю http://[Server-IP]:8000/app_dev.php/lucky/number всегда получаю 404:

No route found for "GET /lucky/number"
404 Not Found - NotFoundHttpException
1 linked Exception: ResourceNotFoundException »

[2/2] NotFoundHttpException: No route found for "GET /lucky/number"   +
[1/2] ResourceNotFoundException:    +

routing.yml

app: 
    resource: "@AppBundle/Controller/" 
    type: annotation

Контроллер

namespace AppBundle\Controller; 

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\HttpFoundation\Response;

class LuckyController 
{ 

    /**
     * @Route("/lucky/number") 
     */
    public function numberAction() 
    { 
        $number = rand(0, 100);
        return new Response( '<html><body>Lucky number: '.$number.'</body></html>' ); 
    }
}

Не знаю, где ошибка...

ERROR - Uncaught PHP Exception Symfony\Component\HttpKernel\Exception\NotFoundHttpException: "Нет маршрута найдено" GET/удачливый/номер"" в/вар/WWW/HTML/[Symfony-Folder]/приложение/кэш/DEV/classes.php line 2061

php app/console debug:route
 [router] Current routes
 Name                     Method Scheme Host Path
 _wdt                     ANY    ANY    ANY  /_wdt/{token}
 _profiler_home           ANY    ANY    ANY  /_profiler/
 _profiler_search         ANY    ANY    ANY  /_profiler/search
 _profiler_search_bar     ANY    ANY    ANY  /_profiler/search_bar
 _profiler_purge          ANY    ANY    ANY  /_profiler/purge
 _profiler_info           ANY    ANY    ANY  /_profiler/info/{about}
 _profiler_phpinfo        ANY    ANY    ANY  /_profiler/phpinfo
 _profiler_search_results ANY    ANY    ANY  /_profiler/{token}/search/results
 _profiler                ANY    ANY    ANY  /_profiler/{token}
 _profiler_router         ANY    ANY    ANY  /_profiler/{token}/router
 _profiler_exception      ANY    ANY    ANY  /_profiler/{token}/exception
 _profiler_exception_css  ANY    ANY    ANY  /_profiler/{token}/exception.css
 _configurator_home       ANY    ANY    ANY  /_configurator/
 _configurator_step       ANY    ANY    ANY  /_configurator/step/{index}
 _configurator_final      ANY    ANY    ANY  /_configurator/final
 _twig_error_test         ANY    ANY    ANY  /_error/{code}.{_format}
 homepage                 ANY    ANY    ANY  /
4b9b3361

Ответ 1

Я только что добавил

<?php

в файл "LuckyNumberController", и он работает... очень странно.

Спасибо всем

Ответ 2

Попробуйте этот URL:

http://[Server-IP]: 8000/app_dev.php/ru/lucky/number

Там есть ошибка в книге Symfony: они забыли поддержку демонстрационного приложения i18n.

Просто добавьте параметр "/en" перед маршрутизацией.


Я знаю, что этот вопрос закрыт, но я надеюсь, что мой ответ поможет другим, которые все еще сталкиваются с этой проблемой.

Ответ 3

Иногда возникает проблема с кешем. Попробуйте удалить папку dev из /project/var/cache/dev.

Как говорит authentictech, вы также можете попробовать выполнить команду:

php bin/console cache:clear

Если вы хотите указать среду, вы должны добавить свойство --env = prod.

Ответ 4

Фактически вы не расширяете класс Symfony Controller. Класс должен быть . LuckyController расширяет контроллер

// src/AppBundle/Controller/LuckyController.php 
namespace AppBundle\Controller; 

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 
use Symfony\Component\HttpFoundation\Response;

class LuckyController extends Controller {

     /** 
      * @Route("/lucky/number") 
      */ 
     public function numberAction() { 
         $number = rand(0, 100); 
         return new Response('<html><body>Lucky number: '.$number.'</body></html>');
     }

}

EDIT:, проблема в этом вопросе заключалась не в расширении контроллера, поэтому игнорировать мой ответ.

Ответ 5

Я скопировал и вставил ваш контроллер в существующий проект Symfony, и маршрут сразу же появился. Поэтому ничего плохого в контроллере нет.

Я также сравнил routing.yml, и он тот же.

Осталось только проверить структуру папок и убедиться, что у вас нет разных проектов Symfony, смешанных друг с другом; возможно, вы редактируете нужный файл, но начинаете веб-сервер с другого пути.

Проверьте внимательно или перестройте проект на совершенно другом пути. Поскольку вы тестируете со встроенным веб-сервером, вам не нужно помещать ваш проект в /var/www/html (на самом деле это лучше не делать).

Ответ 6

http://localhost:8080/ SymfonyProject/web/app_dev.php/lucky/number

Это работает для меня. Измените "SymfonyProject" на папку с названием вашего проекта или удалите ее, если ваш проект указан непосредственно сервером. Также обратите внимание на порт, который работает для вас (localhost: 8080). В моем случае 8080, в вашем может быть 8000 или что-то еще.

Ответ 7

Еще одна причина, по которой вы можете получить "Нет маршрута, найденного для" GET/luck/number ", потому что у вас есть вкладка перед аннотацией @Route. Я думал, что я запрограммировал свой код точно так же, как в примере, и получал эта ошибка, но оказалось, что это вкладка.

См. следующий код ниже, и обратите внимание, что первый создает исключение "Нет маршрута найдено...":

/**
 *  @Route("/lucky/number")
 */

 /**
 * @Route("/lucky/number")
 */

Ответ 8

В случае, если кто-то сталкивается с этой проблемой: для меня проблема была двоякой:

  • Я забыл назначить пространство имен namespace AppBundle\Controller;
  • Я не добавил инструкцию использования для шаблона use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;

Ответ 9

Имел ту же проблему, но по совершенно другой причине, чем те, которые показаны здесь до сих пор...

Как-то моя демо не определяла локаль по умолчанию. Кажется, есть несколько конфигураций, которые могли бы решить эту проблему, но я не достаточно знаком с Symfony, чтобы узнать точную причину. Моим решением до этого было просто определить локаль в URL-адресе, например:

/app_dev.php/ ан/повезло/число

Ответ 10

Расширение базового класса Контроллер не работал у меня. Чтобы решить проблему, мне пришлось внести следующие изменения в web/app.php

$kernel = new AppKernel('prod', true);

Также мне пришлось добавить 'en' в URL: http://scotchbox.demo/en/lucky/number