#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) {
то, что должно создавать массив полей. Но объектная модель по-прежнему настоятельно рекомендуется, поскольку она обеспечивает структуру данных, на которые можно ссылаться и отлаживать, в отличие от абстрактного массива.