Задать вопрос

Как правильно обработать форму не связанную с Entity?

Сделал форму не связанную с сущностью. Фактически это простая форма сортировки записей в админке (в дальнейшем добавлю и фильтрацию по параметрам).

class ImageFilterType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('sortBy', ChoiceType::class, [
                'choices' => [
                    'ID' => 'id',
                    'label.createdAt' => 'createdAt',
                    'label.publishedAt' => 'publishedAt',
                    'label.updatedAt' => 'updatedAt',
                ],
                'label' => 'label.sort_by',
                'required' => true,
            ])
            ->add('direction', ChoiceType::class, [
                'choices' => [
                    'label.sort_direction_ASC' => 'ASC',
                    'label.sort_direction_DESC' => 'DESC'
                ],
                'label' => 'label.sort_direction',
                'required' => true,
            ])
            ->add('submit', SubmitType::class, [
                'label' => 'OK'
            ]);
    }
}


В контроллере пытаюсь получить переданные формой параметры:

/**
     * @Route("/images/{page}", defaults={"page": 1}, name="admin_image_list")
     */
    public function index(int $page, Request $request, ImageRepository $imageRepository): Response
    {
        $sortBy = $request->get('sortBy', 'id');
        $direction = $request->get('direction', 'DESC');

        $filterForm = $this->createForm(ImageFilterType::class, [
            'sortBy' => $sortBy,
            'direction' => $direction,
        ])->handleRequest($request);

        $images = $imageRepository->findEntities([], $sortBy, $direction, $page, 10);

        return $this->render('admin/gallery/image_list.html.twig', [
            'images' => $images,
            'filterForm' => $filterForm->createView(),
        ]);
    }


Но в итоге я не получаю в контроллере параметров `$sortBy` и `$direction` - они назначаются по дефолту. В дебаг панели видно, что я получаю не отдельные параметры `sortBy` и `direction`, а массив
image_filter [▼
  "sortBy" => "updatedAt"
  "direction" => "DESC"
  "submit" => ""
  "_token" => "dOketsGIJFAVlVaPvjbBtzx5b3ksQ8nZ6jwY-JT7HDo"
]


Если передавать форму GET методом, то адресная строка такая: `/admin/images?image_filter%5BsortBy%5D=updatedAt&image_filter%5Bdirection%5D=DESC&image_filter%5Bsubmit%5D=&image_filter%5B_token%5D=dOketsGIJFAVlVaPvjbBtzx5b3ksQ8nZ6jwY-JT7HDo`

Как правильно обработать такую форму?
  • Вопрос задан
  • 98 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
BoShurik
@BoShurik Куратор тега Symfony
Symfony developer
$filter = $filterForm->getData();
$images = $imageRepository->findEntities([], $filter['sortBy'], $filter['direction'], $page, 10);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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