PersisCollection в форме EntityType - PullRequest
       7

PersisCollection в форме EntityType

0 голосов
/ 06 ноября 2018

Я сохраняю все данные из форм в JSON_arrays в БД. Теперь у меня проблема с EventListeners.

Когда я беру данные из $ event-> getClientsShippings () и пытаюсь передать их в «выборы» в другом связанном объекте, это дает мне ошибку, которая:

Catchable Fatal Error: Object of class App\Entity\ClientsShippings could not be converted to string

Я попробую это: $ shipping-> getJson () ["clients_shippings"] ["name"], но есть еще одна ошибка:

Attempted to call an undefined method named "getJson" of class "Doctrine\ORM\PersistentCollection".

Единственный способ, с помощью которого я могу использовать его в качестве примера функции:

'choices' => function($shipping) {
return ''.$shipping->getJson()["clients_shippings"]["name"].''
}

Но это забирает данные из объекта этого поля, а не из Eventlistener.

Вот мой код:

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
                ->add('client', EntityType::class, array(
    'data' => $options['client'],
    'mapped' => false,
    'attr' => ['class' => 'chosen-select','data-placeholder'=>'Wybierz klienta'],
    'class' => UserDetails::class,
    'choice_label' => function ($client) {
      if(isset($client->getJson()["client"]["firma"]))
      {
        $firma = $client->getJson()["client"]["imie"];
        }
        else {
          $firma = "";
          }
    return  ''.$firma.' '.$client->getJson()["client"]["imie"] .' '. $client->getJson()["client"]["nazwisko"].'';
      },
    'label' => 'Wybierz klienta'

                ))

        ->add('product', EntityType::class, array(
    'data' => $options['product'],
    'mapped' => false,
    'multiple' => true,
    'class' => Products::class,
    'attr' => ['class' => 'chosen-select','data-placeholder'=>'Wybierz produkt'],
    'choice_label' => function ($product) {
        return  ''.$product->getJson()["products"]["name"] .' | Stan Magazynowy: '.$product->getJson()["products"]["stock"].'';
      },
  'label' => 'Wybierz produkty'

        ))
        ->add('shipping', EntityType::class, [
          'class' => ClientsShippings::class,
          'placeholder' => 'Wybierz adres dostawy',
          'choices' => []
        ])

            ->add('save', SubmitType::class, [
            'label' => 'Zapisz',
            'attr' => ['class' => 'btn btn-primary pull-right']])
        ;


    $builder->get('client')->addEventListener(
      FormEvents::POST_SUBMIT,
      function (FormEvent $event)
      {
        $form = $event->getForm();
        $shipping = $form->getData()->getClientsShippings();

        $form->getParent()->add('shipping', EntityType::class, [
          'class' => ClientsShippings::class,
          'placeholder' => 'Wybierz adres dostawy',
          'choices' => $shipping->getJson()["clients_shippings"]["name"]


        ]);
      }
    );



    }

Любая идея, как я могу передать persistCollection, что я получил от EventLitener в поле?

Если я оставлю «очистить» массив, то, что я взял из функции getClientsShipings (), которая выдает ошибку, что я попытаюсь преобразовать массив в строку.

1 Ответ

0 голосов
/ 07 ноября 2018

Хорошо, решение легко. Я мимо, если кто-то прочтет это.

  $builder->get('client')->addEventListener(
      FormEvents::POST_SUBMIT,
      function (FormEvent $event)
      {
        $form = $event->getForm();
        $shippings = $form->getData()->getClientsShippings()->getValues();

        $form->getParent()->add('shipping', EntityType::class, [
          'class' => ClientsShippings::class,
          'placeholder' => 'Wybierz adres dostawy',
          'choices' => $shippings,
          'choice_label' => function ($shipping) {
            return "".$shipping->getJson()['clients_shippings']['name']."";
          }

Если кто-то получил PersistentCollection и ему нужно преобразовать его в ArrayCollection как я, используйте функцию getValues ​​(), а затем я передал этот массив в «выборы», а затем, если я прочитал choice_label из функции цикла, он принял правильные записи.

;)

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