Форма Symfony перенаправляет на контроллер вместо маршрута - PullRequest
0 голосов
/ 30 августа 2018

Использование Symfony 3.4

У меня есть эта форма, в которой пользователь выбирает цвет, и когда вы отправляете форму, вместо перенаправления на маршрут, я пересылаю данные, представленные контроллеру:

public function selectColorAction(Request $request)
{



$form = $this->createForm(pickColorType::class);
$form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) 

    {
        $data = $form["color"]->getData();
        $getColorId = $data->getId();


        $response = $this->forward('AppBundle:Products:selectPaint', 
        array(
        'color'=>$getColorId,


        )); 
        return $response;
    }

}

Это контроллер, который получает данные, отправленные из предыдущей формы:

public function selectPaintAction($color, Request $request)
{
    $form = $this->createForm(BrandNameType::class);
    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) 
    {
        //something
    }

    return $this->render('AppBundle:Color:enter-brand-name.html.twig',
    array(
     'form'=> $form->createView()
    )
    );
}

Проблема в том, что моя пересылка отправляет не только данные, но и первую форму, вызывая ошибку. Профилировщик отображает обе формы: PickColor и форму BrandName. Я хочу только BrandName после пересылки. Что я могу сделать?

1 Ответ

0 голосов
/ 31 августа 2018

Если вы посмотрите немного дальше, что делает метод forward:

protected function forward($controller, array $path = array(), array $query = array())
{
    $request = $this->container->get('request_stack')->getCurrentRequest();
    $path['_forwarded'] = $request->attributes;
    $path['_controller'] = $controller;
    $subRequest = $request->duplicate($query, null, $path);

    return $this->container->get('http_kernel')->handle($subRequest, HttpKernelInterface::SUB_REQUEST);
}

клонирует текущий запрос с $request->duplicate. Дубликат копирует опубликованные значения (и другие вещи).

Вы можете попытаться удалить отправленные данные формы из запроса вручную перед запуском пересылки.

Что бы выглядело так:

$request->request->remove('THE_NAME_OF_YOUR_FORM_PARAMETER'); 
#what your getBlockPrefix of the PickColorType returns

Если symfony не внедряет клон исходного запроса в контроллеры, он должен работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...