Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SF][SF2] Nadpisanie formularza edycji profilu użytkownika
Forum PHP.pl > Forum > PHP > Frameworki
swiezak
Witajcie.
Postanowiłem nadpisać formularz edycji profilu danego użytkownika w SF 2.7, dlatego w utworzonym bundle'u UserBundle utworzyłem plik o takiej zawartości:

Tech/UserBundle/Form/ProfileFormType.php
  1. namespace Tech\UserBundle\Form;
  2.  
  3. use Symfony\Component\Form\FormBuilderInterface;
  4. use FOS\UserBundle\Form\Type\ProfileFormType as BaseType;
  5.  
  6. class ProfileFormType extends BaseType
  7. {
  8. public function buildForm(FormBuilderInterface $builder, array $options)
  9. {
  10. parent::buildForm($builder, $options);
  11.  
  12. // Add custom fields
  13. $builder->add('name');
  14. $builder->add('surname');
  15. $builder->add('address');
  16. $builder->add('postCode');
  17. $builder->add('city');
  18. $builder->add('phone');
  19. $builder->add('company');
  20. $builder->add('nip');
  21.  
  22. // $builder->add('type'); // typ konta
  23. }
  24.  
  25. public function getParent()
  26. {
  27. return 'fos_user_profile';
  28. }
  29.  
  30. public function getName()
  31. {
  32. return 'tech_user_profile';
  33. }
  34. }


Nadpisałem też widok w pliku app/Resources/FOSUserBundle/views/Profile/edit_content.html.twig:
  1. {% trans_default_domain 'FOSUserBundle' %}
  2.  
  3. {{ form_start(form, { 'action': path('fos_user_profile_edit'), 'attr': { 'class': 'fos_user_profile_edit' } }) }}
  4. {# {{ form_widget(form) }} #}
  5. {{ form_row(form.username, { 'label' : 'Nazwa użytkownika' }) }}
  6. {{ form_row(form.email, { 'label' : 'E-mail' }) }}
  7.  
  8. {{ form_row(form.name, { 'label' : 'Imię' }) }}
  9. {{ form_row(form.surname, { 'label' : 'Nazwisko' }) }}
  10. {{ form_row(form.address, { 'label' : 'Adres' }) }}
  11. {{ form_row(form.postCode, { 'label' : 'Kod pocztowy' }) }}
  12. {{ form_row(form.city, { 'label' : 'Miejscowość' }) }}
  13. {{ form_row(form.phone, { 'label' : 'Telefon' }) }}
  14.  
  15. {{ form_row(form.company, { 'label' : 'Firma' }) }}
  16. {{ form_row(form.nip, { 'label' : 'NIP' }) }}
  17.  
  18. {{ form_rest(form) }}
  19. <div>
  20. <input type="submit" value="{{ 'profile.edit.submit'|trans }}" />
  21. </div>
  22. {{ form_end(form) }}


routing.yml:
  1. fos_user_profile_edit:
  2. path: /profile/edit
  3. defaults: { _controller: TechUserBundle:Profile:edit }
  4. requirements:
  5. methods: GET|POST


services.xml
  1. <?xml version="1.0" ?>
  2.  
  3. <container xmlns="http://symfony.com/schema/dic/services"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="http://symfony.com/schema/dic/services <a href="http://symfony.com/schema/dic/services/services-1.0.xsd&quot;&gt;" target="_blank">http://symfony.com/schema/dic/services/ser...0.xsd"></a>
  6.  
  7. <services>
  8. <service id="tech_user.profile.form.type" class="Tech\UserBundle\Form\ProfileFormType">
  9. <tag name="form.type" alias="tech_user_profile" />
  10. <argument>%fos_user.model.user.class%</argument>
  11. </service>
  12. </services>
  13. </container>


Zatrzymałem się przy pewnej drobnej rzeczy.
Chciałbym, aby w formularzu edycji profilu poniższe pola:
  1. {{ form_row(form.company, { 'label' : 'Firma' }) }}
  2. {{ form_row(form.nip, { 'label' : 'NIP' }) }}


były widoczne tylko dla typu konta o fladze 1, dla pozostałych nie wyświetlały się. W bazie danych mam kolumnę o nazwie "type" i przyjmuje ona wartości: 0 dla zwykłego użytkownika, 1 dla firmy, 2 dla hurtownika.
W jaki sposób uzyskać ww. efekt?
ohm
Musisz dorzucić security context do formularza (ProfileFormType), mniej więcej jak tutaj (czyli formularz jako service)
https://stackoverflow.com/questions/1199876...ass-in-symfony2

i sprawdzasz czy dany użytkownik powinien mieć konkretne pola. I lepiej byłoby jak byś renderował jednak formularz przy użyciu {{ form_widget(form) }} wink.gif
swiezak
Dzięki wielkie, wszystko działa jak należy. Niech Ci Bóg w dzieciach wynagrodzi ;-)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.