Как smyfony узнает, какую сущность использовать из формы - PullRequest
0 голосов
/ 13 апреля 2019

Хорошо, вот пример.

Я создал проект для тестирования.Теперь у меня есть DatabaseInteractionType.php Класс.

Где у меня есть это поле.

           ->add(
                'question',
                TextType::class,
                [
                    'attr' => [
                        'placeholder' => 'Enter your Question',
                        'class' => 'form-control'
                    ],
                    'required' => true
                ]
            )

question - это взятие от моей Enitity, которая называется DatabaseInteraction.php

Теперь допустим, что я хочу заменить question другим полем из другого Entitiy.Где это определено?

Фон для вопроса: я использовал make: форму, чтобы создать форму, основанную на Enitity.Но теперь я хочу знать, где происходит «соединение».

Ответы [ 2 ]

0 голосов
/ 14 апреля 2019

опция data_class - это способ получить имя класса в форме.

опция data_class, добавив следующее в класс типов вашей формы

вот так:

// src/Form/TaskType.php
use App\Entity\Task;
use Symfony\Component\OptionsResolver\OptionsResolver;

// ...
public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults([
        'data_class' => Task::class,
    ]);
}
0 голосов
/ 13 апреля 2019

Это в основном PropertyAccess магия.Если в вашей форме есть поле question (первый параметр вызова FormBuilder::add()), оно будет использоваться для просмотра заданного вами объекта или массива, если у него есть поле / свойство / ключ с похожим именем,Подобное в этом контексте означает: (для объектов) метод с именем getQuestion, метод с именем isQuestion или hasQuestion, свойство или метод с именем question, если объект имеет магию __get или __callопределено, он будет использовать это тоже.(все, конечно, только, если публично).Это - я считаю - большинство опций, которые используются для разрешения доступа к свойству.(Подробности можно найти по ссылке , приведенной в начале абзаца.)

Теперь у всех типов форм есть опция property_path, с которойВы можете установить другое свойство для поиска (где вы можете даже углубиться в подробности, см. также PropertyAccess для получения более подробной информации).

Так что «соединение» выполняется из компонента Form Symfonyиспользуя компонент PropertyAccess Symfony.С другой стороны, команда make:form cli использует отражение , чтобы посмотреть, какие поля доступны в выбранном объекте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...