Как я могу отправить клиенту требования проверки?

Я хочу получить от элементов ввода сервера их требования проверки, которые я храню в файле validation.yaml.

о, и, как видно из тегов, я делаю это с Symfony 4.

Когда пользователь захочет загрузить новый пост, у него будет представление поста по умолчанию, но с элементами ввода - это то, чего я хочу добиться.

На стороне сервера: У меня есть 2 идеи, ни одну из них я не знаю, что реализовать

Получите проверку и создайте элементы как-нибудь:

/**
 * Controller function
 */
public function getPostFields(): JsonResponse
{
    $topicRequirements = getThemFromSomewhere('topic');
    $categoryRequirements = getThemFromSomewhere('category');
    # How do I get those?

    $topicHTMLInput = buildItSomehow('input', $topicRequirements);
    $categoryHTMLSelection = buildItSomehow('selection', $categoryRequirements);
    # Or build those??

или создайте его через конструктор форм:

/**
 * Builder function
 */
public function buildForm(FormBuilderInterface $builder, array $options)
{
        $builder

        ->add('category', EntityType::class, [
            'class' => Category::class
        ])

        ->add('topic', TextType::class);
}

и сделать это так:

/**
 * Controller function
 */
public function getPostFields(): JsonResponse
{
    $post = new Post();
    $form = $this->createForm(Builder::class, $post);

    $HTMLInput = $form->renderHTMLInput();
    $topicHTMLInput = $HTMLInput['topic'];
    $categoryHTMLSelection = $HTMLInput['category'];

Клиент:

var post = {
    topic: someHTMLElement,
    category: someOtherHTMLElement,
    insert: function(data) {
        for (let key in this)
            if (this[key] instanceof Element && data.hasOwnProperty(key))
                this[key].innerHTML = data[key];
    }
}

response = someXMLHttpRequestResponse;
post.insert(response.data);

Я хочу, чтобы response.data, который я передаю post.insert, соответствовал требованиям проверки с сервера, как: {topic: '<input attr>', category: '<input attr>'}

так что на стороне сервера я ожидаю

    return new JsonResponse(['data' => [
        'topic': $topicHTMLInput,
        'category': $categoryHTMLSelection
    ]]);
}

Рад получить помощь ;)

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
26
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я пошел с конструктором и оказалось, что вы можете отображать в Twig form_widget без формы, что я и сделал. Это не самый оптимизированный ответ, но он работает так, как я хотел:

/**
 * Controller function
 */
public function getPostFields(): JsonResponse
{
    $post = new Post();
    $form = $this->createForm(PostFormBuilder::class, $post);
    $form = $form->createView();

    return new JsonResponse([
        'data' => [
            'category' => $this->renderView('elements/form/category.twig', ['post' => $form]),
            'topic' => $this->renderView('elements/form/topic.twig', ['post' => $form]),
        ]
    ]);
}
/**
 * templates/elements/form/category.twig
 */
{{ form_widget(post.category) }}
/**
 * templates/elements/form/topic.twig
 */
{{ form_widget(post.topic) }}

Другие вопросы по теме