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")
*/
в случае, если кто-то еще сталкивается с этой проблемой: для меня проблема была двоякая:
- Я забыл назначить пространство имен
namespace AppBundle\Controller;
- Я не добавил оператор 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