Как захватить данные в моем контроллере из класса построителя формы, работающего с Symfony

#php #symfony

Вопрос:

Я создал форму с помощью конструктора и путем создания класса, как показано ниже

 // form builder class testform

use SymfonyComponentFormAbstractType;
use SymfonyComponentFormExtensionCoreTypeDateType;
use SymfonyComponentFormExtensionCoreTypeSubmitType;
use SymfonyComponentFormFormBuilderInterface;

class testForm extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add(
            'startDate',
            DateType::class,
            [
                'label' => 'startDate',
                'format' => 'yyyy-MM-dd',
                'required' => true,
            ]
        );
 

Я могу собирать данные этой формы в своем контроллере и запрашивать свою базу данных с помощью приведенного ниже, который работает

 // controller where I get data after submitting

 $form = $this->createForm(testForm::class);
        $form->handleRequest($request);
if ($form->isSubmitted() amp;amp; $form->isValid()) {
            $start = date_format($form->get('startDate')->getData(), 'Y-m-d');

        }
 

Проблема, с которой я сейчас сталкиваюсь, заключается в том, что изменились требования к получению этих данных в моем контроллере.
Я должен получить данные из конструктора классов форм без использования getData() метода, я должен захватить данные, используя приведенный ниже объект

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

Пожалуйста, как мне сделать это эффективно, так как я знал только, как использовать метод get во всей своей практике

Это то, что я пытаюсь сделать в данный момент

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

 if ($form->isSubmitted() amp;amp; $form->isValid()) {
        foreach ($form as $filled) {
            echo $filled['startDate'];
        } 
    }
 

здесь я пытаюсь получить значение даты начала из моего для каждого цикла

но я получаю эту ошибку Child "startDate" does not exist.

Но когда я dump($filled);

Я получаю это ниже, которое показывает, что дата начала присутствует

снимок экрана как для вывода дампа

Итак, вопрос в том, как мне получить данные без использования getData() метода?

является ли мой подход неправильным

Комментарии:

1. Вопрос в том, зачем вам нужны базовые данные?

2. Вы должны использовать объектную модель класса с требуемыми методами установки/получения. Объект будет передан по ссылке на форму Symfony. См. раздел: Создание классов Форм . В примере вы можете затем просто использовать $task->getStartDate() для извлечения отправленных данных.

3. данные необходимы для запроса моей базы данных, я передаю их в свой репозиторий, я обновлю свой вопрос этим

4. хорошо, @WillB. Я прочитаю и попробую это

5. В противном случае вы бы изменили foreach ($form as $filled) { на foreach ($form->getData() as $filled) { то, что должно создавать массив полей. Но объектная модель по-прежнему настоятельно рекомендуется, поскольку она обеспечивает структуру данных, на которые можно ссылаться и отлаживать, в отличие от абстрактного массива.