Можно ли использовать компонент формы Symfony вместе с response.js? - PullRequest
0 голосов
/ 20 мая 2019

Я использую компонент формы Symfony.У меня много форм в моем проекте.

Чтобы отлично выучить компонент формы, нужно пройти долгий путь;).Но теперь я люблю это.

Я люблю также автоматическую проверку и так далее.

Итак - теперь я хочу изучать и использовать response.js в своем проекте.

Но, похоже, я никак не могу использовать валидацию и построитель форм, как раньше, для проектов?

Я тут прав?

С наилучшими пожеланиями, Майкл

Ответы [ 2 ]

0 голосов
/ 20 мая 2019

Хотя в контексте API вы не будете использовать компонент формы для фактического отображения вашей формы в формате HTML ($form->createView() метод), вы все равно сможете извлечь выгоду из всей магии, которую она предлагает: проверка, события формы и т. Д. API или нет, я лично считаю, что вы всегда должны использовать типы форм в мутациях контроллера.

Например, используя FOSRestBundle, рассмотрим простое действие контроллера, которое выглядит следующим образом:

/**
 * @Rest\Put("posts/edit/{id}", name="posts.edit", requirements={"id"="\d+"})
 *
 * @param Post $post
 * @param Request $request
 *
 * @return Post
 *
 * @throws BadRequestException
 *
 */
public function edit(Post $post, Request $request): Post
{
    $form = $this->createForm(PostType::class, $user);
    $form->handleRequest($request);
    $form->submit($request->request->all());
    if ($form->isValid()) {
        $em = $this->getDoctrine()->getManager();
        $em->persist($post);
        $em->flush();

        return $post;
    }

    // Any error handling of your taste.
    // You could consider expliciting form errors.
    throw new BadRequestException();
}

Обратите внимание, что Post сущность и PostType форма, конечно, должны быть созданы. Я не буду здесь это подробно описывать, поскольку в этом контексте о них особо нечего сказать.

Также обратите внимание, что мы не проверяем, отправлена ​​ли форма. Рендеринг формы как HTML - это работа React в вашем случае, это действие не будет использоваться для получения чего-либо, это исключительно маршрут PUT. Это означает, что любой поступающий туда запрос ДОЛЖЕН быть запросом PUT, содержащим правильные данные, которые должны быть обработаны нашим PostType, представленным в вашем случае HTML-формой, встроенной вручную в React.

Кроме того, FOSRestBundle, немного выходя за рамки вопроса, подписывается на все, что возвращает ваше действие, и автоматически сериализует его в настроенном формате (я полагаю, в вашем случае, скажем, JSON). Это означает, что наш пример действия может вернуть два возможных ответа:

  • Ответ с кодом состояния 200, содержащий нашу сериализованную публикацию. (Вы также можете рассмотреть 204 и ничего не вернуть.)
  • Ответ с кодом состояния 400, содержащий все, что мы хотим (скажем, ошибки формы).

Позвольте мне привести вас к документации FOSRestBundle .

0 голосов
/ 20 мая 2019

Вероятно, не потому, что ваша форма предназначена для использования на сервере: проверка / отображение ошибок / нормализация данных / санация / и т.д.

Обычно вы используете React для отображения HTML и подключения его к вашему серверу с помощью API.

...