Nano Hash - криптовалюты, майнинг, программирование

Коллекция форм Symfony с Entity

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

  • У меня есть объекты "Профиль" и "Языки" с однонаправленным отношением ManyToMany от профиля:иностранные_языки к языкам. Сгенерированная таблица profile_has_languages ​​выглядит нормально. Я ввел некоторые тестовые данные прямо в него.

  • Я создал ProfileType, и с помощью $builder->add('foreign_languages') он показывает мне одно поле выбора с выбранными правильными языками. Все идет нормально...

Теперь каждый выбранный язык должен быть в своем собственном поле выбора. Я знаю, что мне нужна коллекция:

$builder->add('foreign_languages', 'collection', array('type'=>new LanguageType()));

Это мой LanguageType:

class LanguageType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
         $builder->add('name','entity',array(
                     'class'=>'Test\TestBundle\Entity\Languages',
                     'property' => "name",
                     'multiple' => false,
                     'query_builder' => function(EntityRepository $er) {
                         return $er->createQueryBuilder('s')->orderBy('s.name', 'asc');
                       },
                ));
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
    'data_class' => 'Test\TestBundle\Entity\Languages'));
}
public function getName()
{
    return 'language';
}
}

Это дает мне 3 поля выбора со всеми доступными языками (по одному для каждого языка, выбранного пользователем). Это нормально, но все языки не выбраны. Как мне теперь предварительно выбрать правильные языки?

Должен ли я где-то использовать цикл? Или должна быть связь между Языками и Профилем (как это будет выглядеть?)

Я был бы очень признателен за вашу помощь - я застрял с этим с 2 дней... :(

Обновление: я знаю, как это работает с редактируемым текстовым полем, из этого примера: http://symfony.com/doc/2.3/cookbook/form/form_collections.html. Чтобы упростить мой вопрос: какая разница, если я хочу показать объект как выбор в моей коллекции (выбираемый, но не редактируемый)?

Я нашел рабочее решение с преобразователем данных здесь: Symfony 2 Коллекция встроенных форм Многие ко многим

Это рекомендуемый способ?


Ответы:


1

Чтобы сохранить этот выбор, вам понадобится отношение «многие ко многим» между профилем и языком. Что-то вроде:

В профиле

/**
 * @var foreign_languages
 * @ORM\ManyToMany(targetEntity="Language", mappedBy="profils")
 */
private $foreign_languages;

На языке

/**
 * @var profils
 * @ORM\ManyToMany(targetEntity="Profil", inversedBy="foreign_languages")
 */
private $profils;

Но для предварительного выбора параметров, если пользователь еще не выбрал, вам нужно либо добавить языковые объекты к объекту, который вы используете для создания формы в методе вашего контроллера, либо добавить их непосредственно при создании нового Профиль

09.07.2014
  • Спасибо, но проблема пока не в том, как сохранить выбор. Я вручную ввел некоторые тестовые данные в БД, но эти тесты не отображаются при использовании коллекции. Я не знаю, нужно ли мне предварительно выбирать сохраненные выборки в объекте или я могу выбрать их автоматически... 10.07.2014
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..