Как раскидать роутинг в Symfony 3?

Изучаю Symfony, никак не могу справиться c роутингом через аннотации и yml конфигами.

Нужно, чтобы весь роутинг в моём проекте asoft/OrganizerBundle прописывался аннотациями в контроллерах.
Прописано:

E:\Program Files\Apache24\htdocs\symfony.local\organizer\app\config\routing.yml
organizer:
    resource: "@OrganizerBundle/Resources/config/routing.yml"

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


E:\Program Files\Apache24\htdocs\symfony.local\organizer\src\asoft\OrganizerBundle\Resources\config\routing.yml
organizer:
    resource: "@OrganizerBundle/Controller/"
    type:     annotation


E:\Program Files\Apache24\htdocs\symfony.local\organizer\src\asoft\OrganizerBundle\Controller\DefaultController.php
<?php
declare(strict_types = 1);

namespace asoft\OrganizerBundle\Controller;

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

class DefaultController extends Controller
{
    /**
     * @Route("/")
     */
    public function showMainAction(): Response
    {
        return $this->showDayAction((new \DateTime())->format('Y-m-d'));
    }


    /**
     * @Route("/{day}")
     */
    public function showDayAction(string $day): Response
    {
        echo $day;
        return $this->render('OrganizerBundle:Default:index.html.twig');
    }
}


При переходе на главную пишет в логе:
request.CRITICAL: Uncaught PHP Exception InvalidArgumentException: "The controller for URI "/" is not callable. Expected method "indexAction" on class "asoft\OrganizerBundle\Controller\DefaultController". Available methods: "showMainAction", "showDayAction", "setContainer"." at E:\Program Files\Apache24\htdocs\symfony.local\organizer\vendor\symfony\symfony\src\Symfony\Component\HttpKernel\Controller\ControllerResolver.php line 98 {"exception":"[object] (InvalidArgumentException(code: 0): The controller for URI \"/\" is not callable. Expected method \"indexAction\" on class \"asoft\\OrganizerBundle\\Controller\\DefaultController\". Available methods: \"showMainAction\", \"showDayAction\", \"setContainer\". at E:\\Program Files\\Apache24\\htdocs\\symfony.local\\organizer\\vendor\\symfony\\symfony\\src\\Symfony\\Component\\HttpKernel\\Controller\\ControllerResolver.php:98)"} []


При переходе по адресу /2007-05-02 :
request.ERROR: Uncaught PHP Exception Symfony\Component\HttpKernel\Exception\NotFoundHttpException: "No route found for "GET /2007-05-02"" at E:\Program Files\Apache24\htdocs\symfony.local\organizer\vendor\symfony\symfony\src\Symfony\Component\HttpKernel\EventListener\RouterListener.php line 125 {"exception":"[object] (Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException(code: 0): No route found for \"GET /2007-05-02\" at E:\\Program Files\\Apache24\\htdocs\\symfony.local\\organizer\\vendor\\symfony\\symfony\\src\\Symfony\\Component\\HttpKernel\\EventListener\\RouterListener.php:125, Symfony\\Component\\Routing\\Exception\\ResourceNotFoundException(code: 0):  at E:\\Program Files\\Apache24\\htdocs\\symfony.local\\organizer\\var\\cache\\prod\\appProdProjectContainerUrlMatcher.php:56)"} []


Я уже задолбался. Вроде ж импортировал в главный конфиг роута конфиг моего бёндла, а в нём прописал, что весь роутинг идет через аннотации в контроллерах (папка Controller). Что не так?
  • Вопрос задан
  • 1188 просмотров
Решения вопроса 1
Audiophile
@Audiophile Автор вопроса
Всё заработало, когда прописал в глобальном и бёндловском routing.yml соответственно:
organizer:
    resource: '@OrganizerBundle/Resources/config/routing.yml'


organizer:
    resource: "@OrganizerBundle/Controller/DefaultController.php"
    type: annotation


После очистки кэша продакшна заработало.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@denis6064
Fullstack web developer
В аннотации к showMainAction присвойте параметр name.Должно получиться что-то наподобие:
/**
     * @Route("/", name="show_main")
     */


А для showDayAction нужно немого изменить роутинг и что-то наподобие этого сделать:
/**
     * @Route("/day/{day}", name="show_day")
     */


Т.к. получается что вы обращаетесь к одному и тому же action'у
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы