Как сохранить данные формы в базе данных в Symfony без использования конструктора форм?

Я разрабатываю Symfony Bundle для опросов. Я попытался создать свой опрос с помощью конструктора форм Symfony, но у меня было так много проблем из-за моих сложных данных, что я решил создать свою форму вручную в файле html.


Есть ли сейчас возможность сделать что-то подобное:

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


Должен ли я отправлять свою форму в другой php-файл, подобный этому: <form method="post" action="yourscript.php">, или я все еще могу поймать его в своем контроллере, в котором также было действие для открытия файла опроса.


Или мне нужно сделать это, как описано здесь ?

Извините за этот нубский вопрос, но когда я ищу управление формой с помощью Symfony, я нахожу только то, что объясняет, как использовать конструктор форм.


person lxg95    schedule 10.12.2020    source источник
comment
да, вы все еще можете использовать контроллер Symfony. Вам нужно будет извлечь данные формы из объекта запроса, а затем заполнить объект, чтобы сохранить его в БД. вы не можете использовать методы и $form (проверка, isSubmitted()) и т. д.   -  person craigh    schedule 10.12.2020
comment
@craigh как получить данные формы? вот так: <form class="campaignForm" method="post" action="{{ path('path_to_the_method_that_processes_the_form_data')}}"> И как тогда мне получить данные формы в этом методе?   -  person lxg95    schedule 10.12.2020
comment
Согласитесь с Крейгом, когда вы используете такой фреймворк, как Symfony (а не только некоторые его компоненты), вы должны использовать его по пути Symfony, но чтобы использовать его правильно, вам нужно заранее научиться использовать его мощь, а для этого есть очень большая документация, которую нужно прочитать (перед ее использованием), и вы не можете избежать этого :-) PS: я всегда находил полезным взглянуть на исходный код, чтобы увидеть, как все работает внутри.   -  person gp_sflover    schedule 10.12.2020
comment
@Cerad мой совет был в целом и не связан строго с компонентом формы. Кстати, я всегда предпочитаю старое, просто лучше, если оно работает :-) Happy Coding!   -  person gp_sflover    schedule 10.12.2020
comment
@gp_sflover Я делал это в течение 2 месяцев, следуя пути Symfony, но затем возникла проблема, с которой я так сильно боролся, попросил моих коллег о помощи, задал два вопроса о переполнении стека, на которые у обоих нет ответа, и после попыток и попыток всегда получаю новая Проблема, когда была решена другая, мы решили делать форму без формбилдера.   -  person lxg95    schedule 11.12.2020
comment
Моя была не критика, а только факт. Symfony — это PHP-фреймворк (на основе компонентов), с помощью которого вы можете создавать проекты любого типа, НО имеет высокую кривую обучения, и 2 месяцев может быть недостаточно, чтобы хорошо изучить все, что требуется (и компонент Form, безусловно, не самый лучший). самый простой). Он был создан, чтобы не изобретать колодец, поэтому мой совет — посвятить больше времени изучению того, как работает компонент формы. Может быть, это немного не по теме, но могу я спросить вас, зачем вам нужен комплект? Какую версию симфони вы используете?   -  person gp_sflover    schedule 11.12.2020
comment
PS: попробуйте взглянуть на CraueFormFlowBundle, возможно, это поможет вам в использовании Компонент формы.   -  person gp_sflover    schedule 11.12.2020


Ответы (1)


Вы можете сделать что-то похожее на Form с Request.

if ($request->isMethod(Request::POST)) { //check if method is post
  $request->request->get('yourFieldName'); //get values of  post data
}

Я советую вам использовать Symfony Form вместо этого!

person Alexandre Painchaud    schedule 10.12.2020
comment
Есть ли способ получить все данные формы в массиве, чтобы я мог перебирать его? нравится $all = $request->request->get(all_form_data); - person lxg95; 11.12.2020
comment
$request->request->all() EDIT: если это поможет вам, не забудьте отметить как решенный и проголосовать за мой ответ - person Alexandre Painchaud; 11.12.2020
comment
хорошо, это работает хорошо, спасибо - person lxg95; 14.12.2020