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

Symfony2.6: форма обрабатывает запрос с данными массива вместо объекта

У меня есть FormType, который создает группы флажков на основе массива, который передается при создании этого FormType:

//FormType.php

public function __construct(array $choices, array $choicesData)
{
    $this->choices = $choices;
    $this->choicesData = $choicesData;
}

public function buildForm(FormBuilderInterface $builder, array $options)
{
    foreach ($this->choices as $bundle => $class) {
        $choiceBuilder = $builder->create($bundle, 'form', array('virtual' => true));
        foreach ($class as $name => $perm) {
            $choiceBuilder->add(
                    $name, 'choice', array(
                    'choices' => $perm,
                    'multiple' => true,
                    'mapped' => false,
                    'expanded' => true,
                    'required' => 'false',
                    'label' => $name,
                    'data' => $this->choicesData[$bundle][$name]
                )
            );
        }
        $builder->add($choiceBuilder);
    }
    $builder->add('salvar', 'submit', array('label' => false));
}

Примечание. В Type нет setDefaultOptions.

Затем я создаю форму:

//Controller.php

 $form = $this->createForm(new PermissaoType($choices, $choicesData), $choicesData);

Моя проблема: но когда я делаю handleRequest() данных, отправленных с помощью POST, getData() не возвращает изменение формы, только то, что установлено в $choicesData. Может ли кто-нибудь помочь мне в этом?

//Controller.php

if ($request->isMethod('POST')) {

    $form->handleRequest($request); // Not Work
    $data = $form->getData(); // Return $choicesData original
}

Пример оригинала $choiceData:

array(
    'group1' => array(
                    'item1' => array('chk1' => false, 'chk2' => false, 'chk3' => false)
    )
);

Пример отправленной формы:

array(
'group1' => array(
                'item1' => array( 0 => 'chk1', 1 => 'chk3')
    )
);

Пример возврата $choiceData (после $form->handleRequest() и $form->getData()):

array(
    'group1' => array(
                    'item1' => array('chk1' => false, 'chk2' => false, 'chk3' => false)
    )
);

Большое спасибо.


Ответы:


1

Я решил с изменениями ниже:

  • Удалить второй $choicesData в $this->createForm()

    $form = $this->createForm(new PermissaoType($choices, $choicesData));

  • 'data' => $this->choicesData[$bundle][$name] to 'data' => array_keys(array_intersect($this->choicesData[$bundle][$name], array(true)))

  • В FormType я изменил 'mapped' => false на 'mapped' => true.

Спасибо @Jovan Perovic

12.01.2015

2

Если я правильно помню, вам нужно инкапсулировать переданное array с именем формы в качестве ключа.

Например, если у вас есть что-то подобное в вашем классе FormType:

public function getName(){
    return 'some_form_name'
}

Затем вы должны пройти:

$data = array(
    'some_form_name' => $request->request->all() // Encapsulte `POST` data
);

$form->submit($data);

Или вы можете инкапсулировать данные при отправке. Тогда вы могли бы сделать по книге:

$form->handleRequest($request);

Надеюсь это поможет...

10.01.2015
  • Я пробовал это: $form = $this->createForm(new PermissaoType($choices, $choicesData), array('Permissao'=>$choicesData)); Но не работает. Примечание: «Permissao» — это имя FormType. 12.01.2015
  • Новые материалы

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

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

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

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

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

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

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