Autor Wątek: Jak rozszerzyc formularz o dodatkowe pole w Symfony 3.4.11?  (Przeczytany 2424 razy)

poniat

  • Newbie
  • *
  • Wiadomości: 17
    • Zobacz profil
Jak rozszerzyc formularz o dodatkowe pole w Symfony 3.4.11?
« dnia: Sierpnia 01, 2018, 10:03:59 »
Witam,

Jestem totalnie nowy w Symfony. Korzystam z manualahttps://symfony.com/doc/3.4/form/create_form_type_extension.html:

Jednakze jak utworze nowy bundle, zarejestrowalem go i rozszerzylem rodzica, a nastepnie dodalem klase, ktora ma rozszerzyc formularz rodzica widze tylko bialy screen. Dodalem praktycznie zero kodu, ktory mogl by cos zepsuc, a jednak Symfony sie rozsypalo. Zero sensownych bledow w logach.

Jak moge rozszerzyc ten formularz? Czy ktos moze mnie nakierowac, wytlumaczyc?

edit
Formularz, ktory chce rozszerzyc tutaj https://github.com/DivanteLtd/open-loyalty-framework/blob/master/src/OpenLoyalty/Bundle/SettingsBundle/Form/Type/SettingsFormType.php
« Ostatnia zmiana: Sierpnia 01, 2018, 12:29:50 wysłana przez poniat »

poniat

  • Newbie
  • *
  • Wiadomości: 17
    • Zobacz profil
Odp: Jak rozszerzyc formularz o dodatkowe pole w Symfony 3.4.11?
« Odpowiedź #1 dnia: Sierpnia 01, 2018, 16:52:53 »
Zyje ktos tutaj ? :D Symfony umarlo :D

Michał Pipa

  • Administratorzy
  • Full Member
  • *****
  • Wiadomości: 176
    • Zobacz profil
Odp: Jak rozszerzyc formularz o dodatkowe pole w Symfony 3.4.11?
« Odpowiedź #2 dnia: Sierpnia 01, 2018, 18:35:31 »
Nie musisz rozszerzać bundla. Wystarczy że rozszerzysz klasę formularza. Tu masz przykład z FOSUserBundle: Overriding Default FOSUserBundle Forms.

poniat

  • Newbie
  • *
  • Wiadomości: 17
    • Zobacz profil
Odp: Jak rozszerzyc formularz o dodatkowe pole w Symfony 3.4.11?
« Odpowiedź #3 dnia: Sierpnia 02, 2018, 09:02:50 »
Fakt. Zle to sformulowalem. Stworzylem nowy bundle w ktorym znajduje sie ta klasa do rozszerzenia formularza. Tak czy siak to i tak nie dziala. Zarejestrowalem bundle oraz serwise (formExtension), usunalem tylko routing, bo nie potrzebuje. I moje nowe elementy formularza i tak nie dzialaja. Zero sensownych bledow w logach. xdebuger nawet nie zatrzymuje sie w klasie rozszerzajacej formularza. Nie mam pojecia jak to ugryzc. Do tego projekt jest na dockerze i tak sie zastanawialem czy ten docker czegos nie psuje mi po drodze, ale ta teoria jest bardzo watpliwa.
« Ostatnia zmiana: Sierpnia 02, 2018, 09:08:36 wysłana przez poniat »

poniat

  • Newbie
  • *
  • Wiadomości: 17
    • Zobacz profil
Odp: Jak rozszerzyc formularz o dodatkowe pole w Symfony 3.4.11?
« Odpowiedź #4 dnia: Sierpnia 02, 2018, 09:15:37 »
Moj kod:

Moja klasa bundla:

Kod: (php) [Zaznacz]
<?php

namespace MyApp\Bundle\CurrencyBundle;

use 
Symfony\Component\HttpKernel\Bundle\Bundle;

class 
MyAppCurrencyBundle extends Bundle
{
    public function 
getParent()
    {
        return 
'OpenLoyaltySettingsBundle';
    }
}



Klasa rozszerzajaca
Kod: (php) [Zaznacz]

<?php

namespace MyApp\Bundle\CurrencyBundle\Form\Extension;

use 
OpenLoyalty\Bundle\SettingsBundle\Form\Type\SettingsFormType;
use 
Symfony\Component\Form\FormBuilderInterface;

use 
Symfony\Component\Form\AbstractTypeExtension;
use 
Doctrine\ORM\EntityManagerInterface;

use 
Symfony\Component\Form\FormView;
use 
Symfony\Component\Form\FormInterface;

class 
SettingsFormTypeExtension extends AbstractTypeExtension
{
    private 
$entityManager;

    public function 
__construct(EntityManagerInterface $entityManager)
    {
        
$this->entityManager $entityManager;
    }

    
/**
     * {@inheritdoc}
     */
    
public function buildForm(FormBuilderInterface $builder, array $options)
    {
        
// parent::buildForm($builder, $options);

        
$builder->add(
            
$builder
                
->create('currency'ChoiceType::class, [
                    
'choices' => [
                        
'PLN' => 'pln',
                        
'USD' => 'usd',
                        
'EUR' => 'eur',
                        
'GBP' => 'gbp'
                    
],
                    
'constraints' => [new NotBlank()],
                ])
                ->
addModelTransformer(new StringSettingDataTransformer('currency'$this->settingsManager))
        );
    }

    public function 
getDefaultOptions(array $options)
    {
        return array(
            
'help' => null,
        );
    }

    
/**
     * {@inheritdoc}
     */
    
public function getExtendedType()
    {
        return 
SettingsFormType::class;
    }
}

Moj service.yml plik:

Kod: (html) [Zaznacz]
services:
    my_app.currency_bundle.form.extension.type.settings_form:
        class: MyApp\Bundle\CurrencyBundle\Form\Extension\SettingsFormTypeExtension
        tags:
          - { name: form.type_extension, extended_type: OpenLoyalty\Bundle\SettingsBundle\Form\Type\SettingsFormType }


To chyba najwazniejsze czesci kodu?

Valantir

  • Global Moderator
  • Hero Member
  • *****
  • Wiadomości: 593
    • Zobacz profil
Odp: Jak rozszerzyc formularz o dodatkowe pole w Symfony 3.4.11?
« Odpowiedź #5 dnia: Sierpnia 02, 2018, 10:03:12 »
Jak napisał wcześniej Michał Pipa - nie musisz rozszerzać bundle'a.
Wszystko to zależy czy bundle posiada np. opcję, która wskazuje na to jaki formularz jest używany np. do rejestracji - tak jak poniżej:

# app/config/config.yml
fos_user:
    # ...
    registration:
        form:
            type: AppBundle\Form\RegistrationType

Jeśli posiada taką opcję, to wystarczy że wprowadzisz swoją ścieżkę do klasy formularza.

Dodatkowo możesz napisać rozszerzenie do formularza (tak, to raczej powinno wystarczyć).

Możesz nadpisać klasę usługi poprzez comiler passa:

https://symfony.com/doc/current/service_container/compiler_passes.html

Możliwości jest kilka.

poniat

  • Newbie
  • *
  • Wiadomości: 17
    • Zobacz profil
Odp: Jak rozszerzyc formularz o dodatkowe pole w Symfony 3.4.11?
« Odpowiedź #6 dnia: Sierpnia 03, 2018, 09:35:42 »
Wszystko dziala, git :)
« Ostatnia zmiana: Sierpnia 03, 2018, 10:48:28 wysłana przez poniat »