Я начинаю учебник (как новичок), и все отлично работает до:
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:
Не найдено маршрутов для «GET / lucky / number» 404 Not Found – NotFoundHttpException 1 связанный Исключение: ResourceNotFoundException »
[2/2] NotFoundHttpException: маршрут не найден для «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 / lucky / number »» в / var / www / html / [Symfony-Folder] / app / cache / 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 /
Я только что добавил
<?php
к файлу «LuckyNumberController», и он работает … действительно странно.
Спасибо всем
Попробуйте этот URL:
Http: // [Сервер-IP]: 8000 / app_dev.php / о / удачлив / номер
В книге Symfony есть ошибка: они забыли поддержку демонстрационного приложения i18n.
Просто добавьте параметр « / en » перед маршрутизацией.
Я знаю, что этот вопрос закрыт, но я надеюсь, что мой ответ поможет другим, которые все еще сталкиваются с этой проблемой.
Иногда это проблема с кешем. Попробуйте удалить папку dev из / project / var / cache / dev.
Как говорит authentictech , вы также можете попробовать выполнить команду:
php bin/console cache:clear
Если вы хотите указать среду, вы должны добавить свойство –env = prod.
На самом деле вы не расширяете класс 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: в конце концов, проблема в этом вопросе заключалась не в расширении контроллера, поэтому игнорировать мой ответ.
Я скопировал и вставил ваш контроллер в существующий проект Symfony, и маршрут сразу же появился. Так что ничего плохого в контроллере.
Я также сравнивал routing.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") */
В случае, если кто-то сталкивается с этой проблемой: для меня проблема была двоякой:
namespace AppBundle\Controller;
пространства namespace AppBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
Имел ту же проблему, но по совершенно иной причине, чем те, которые показаны здесь до сих пор …
Как-то моя демо не определяла локаль по умолчанию. Кажется, есть несколько конфигураций, которые могли бы решить эту проблему, но я не достаточно знаком с Symfony, чтобы узнать точную причину. Моим решением до этого было просто определить локаль в URL-адресе, например:
/app_dev.php/ ru / lucky / number
Расширение базового класса Контроллер не работал для меня. Чтобы решить эту проблему, мне пришлось внести следующие изменения в web / app.php
$kernel = new AppKernel('prod', true);
Также мне пришлось добавить «en» в URL: http: //scotchbox.demo/en/lucky/number