symfony -- не работает redirect() Как сделать переадресацию

Не работает метод redirect($url) в Symfony

Маршрутизация контроллера построена таким образом:

/**
 * Article контроллер
 * 
 * @Route("article")
 */
class ArticleController extends Controller
{
    /**
     * Выводит на экран список всех статей
     * 
     * @Route("/", name="article_index")
     * 
     * @return Response
     */
    public function indexAction() {}

Т.е. indexAction() вызввается по адресу:

http://localhost/article/

Что по факту

Хочу использовать redirect() в другом методе этого же контроллера.

  1. При таком варианте пути
    return $this->redirect('article/');

    в адресной строке высвечивается

    http://localhost/article/article/

    и выбрасывается NotFoundException

    No route found for "GET /article/article/"
  2. При таком варианте пути
    return $this->redirect('/');

    в адресной строке высвечивается

    http://localhost

    и приветствие Symfony(start working). Тожк не годится)

Решение

Работает redirectToRoute(), если передать ему атрибут name Routa, указанный в аннотации, а не сам маршрут:

return $this->redirectToRoute('article_index');

или redirect() с указанием полного адреса сайта:

return $this->redirect('http://localhost/article');

Key Words for FKN + antitotal forum (CS VSU):

vedro-compota's picture

Cобственно у вас редирект на URL, а можно на имя маршрута:
https://symfony.com/doc/current/controll...

например:

return $this->redirectToRoute('homepage', array(), 301);

(что кстати правильнее внутри сайта ведь URL (сам маршрут) может смениться, а вот имя всегда его имя при этом можно оставить прежним)

_____________
матфак вгу и остальная классика =)

melisa's picture

  1. При таком варианте пути
    return $this->redirectToRoute('article/');

    в адресной строке путь не меняется(остаётся тот, что ведёт к исполняемому действию) и выбрасывается NotFoundException

    Unable to generate a URL for the named route "article/" as such route does not exist.
  2. При таком варианте пути
    return $this->redirectToRoute('/');

    в адресной строке путь также не меняется(остаётся тот, что ведёт к исполняемому действию) и выбрасывается исключение

    Unable to generate a URL for the named route "/" as such route does not exist.
vedro-compota's picture

надо делать редирект на имя маршутра, если на действие index (ваше), то так:

return $this->redirectToRoute('article_index');

_____________
матфак вгу и остальная классика =)