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:/ / [сервер-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:    +

маршрутизации.в формате YML

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

контроллер

namespace AppBundleController; 

use SymfonyBundleFrameworkBundleControllerController;
use SensioBundleFrameworkExtraBundleConfigurationRoute;
use SymfonyComponentHttpFoundationResponse;

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 SymfonyComponentHttpKernelExceptionNotFoundHttpException: "не найден маршрут для" GET/lucky /number"" at/var/www/html/[Symfony-Folder]/app/cache/dev / classes.в PHP строки 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  /

10 ответов


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

<?php

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

спасибо всем


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

http:/ / [сервер-IP]: 8000 / app_dev.php/en/lucky / number

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

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


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


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

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

php bin/console cache:clear

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


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


Я скопировал и вставил ваш контроллер в существующий проект Symfony, и сразу появился маршрут. Так что с контроллером все в порядке.

Я также сравнил маршрутизации.yml и это то же самое.

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

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


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

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


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

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

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

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

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

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

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

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

/app_dev.на PHP/en/лаки/количество


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

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

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