Ответ 1
Я только что добавил
<?php
в файл "LuckyNumberController", и он работает... очень странно.
Спасибо всем
Я начинаю учебник (как новичок), и все отлично работает до:
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 /
Я только что добавил
<?php
в файл "LuckyNumberController", и он работает... очень странно.
Спасибо всем
Попробуйте этот URL:
http://[Server-IP]: 8000/app_dev.php/ru/lucky/number
Там есть ошибка в книге 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;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
Имел ту же проблему, но по совершенно другой причине, чем те, которые показаны здесь до сих пор...
Как-то моя демо не определяла локаль по умолчанию. Кажется, есть несколько конфигураций, которые могли бы решить эту проблему, но я не достаточно знаком с Symfony, чтобы узнать точную причину. Моим решением до этого было просто определить локаль в URL-адресе, например:
/app_dev.php/ ан/повезло/число
Расширение базового класса Контроллер не работал у меня. Чтобы решить проблему, мне пришлось внести следующие изменения в web/app.php
$kernel = new AppKernel('prod', true);
Также мне пришлось добавить 'en' в URL: http://scotchbox.demo/en/lucky/number