Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SF2][Symfony][Symfony2]Manipulacja polami formularza w zależności od akcji
daniel1302
post 18.03.2015, 15:33:20
Post #1





Grupa: Zarejestrowani
Postów: 602
Pomógł: 30
Dołączył: 1.08.2007
Skąd: Nowy Sącz

Ostrzeżenie: (0%)
-----


Witam, zacząłem uczyć się Symfony 2. Mam taki problem:
Mam formularz generowany przez klasę UserType:

W Klasie UserType posiadam generowane 3 kontrolki:
  1. $builder
  2. ->add('name', 'text', array(
  3. 'label' => 'Imię'
  4. ))
  5. ->add('mail', 'text', array(
  6. 'label' => 'Adres email'
  7. ))
  8. ->add('password', 'text', array(
  9. 'label' => 'Hasło'
  10. ));



I teraz wszystko ok, formularz przy akcji tworzenia użytkownika generuję sobię tak:

  1. $form = $this->createForm(new UserType(), $entity, array(
  2. 'action' => $this->generateUrl('user_create'),
  3. 'method' => 'POST',
  4. ));
  5.  
  6. $form->add('submit', 'submit', array('label' => 'Create'));
  7.  
  8. return $form;




I wszystko jest ok.
A tutaj mam problem bo chciałbym zrobić edycję użytkownika i nie pozwolić użytkownikowi edytować raz wpisanego imienia. Puki co tak generuję formularz:
  1. $form = $this->createForm(new UserType(), $entity, array(
  2. 'action' => $this->generateUrl('user_update', array('id' => $entity->getUserId())),
  3. 'method' => 'PUT',
  4. ));
  5.  
  6. $form->add('submit', 'submit', array('label' => 'Edytuj użytkownika'));
  7.  
  8. return $form;


Czy prościej utworzyć nowy formularz pod tą samą Encję Doctrina, czy jest jakiś inny sposób? Mam czas i uczę się frameworka więc zależy mi na tym, aby rozwiązanie było eleganckie, ponieważ chcę sie go dobrze nauczyć.


Pozdrawiam.

Ten post edytował daniel1302 18.03.2015, 15:34:05
Go to the top of the page
+Quote Post
ohm
post 18.03.2015, 19:06:01
Post #2





Grupa: Zarejestrowani
Postów: 618
Pomógł: 143
Dołączył: 22.12.2010

Ostrzeżenie: (0%)
-----


Stwórz formularz bez imienia ('name') i użyj do tego form events -> http://symfony.com/doc/current/cookbook/fo...dification.html
W PreSetData sprawdzisz czy imienia nie ma (lub czy jeszcze nie było edytowane) i dodasz sobie wtedy do tego formularza oczekiwane pole "name"
Go to the top of the page
+Quote Post
Forti
post 18.03.2015, 19:56:47
Post #3





Grupa: Zarejestrowani
Postów: 655
Pomógł: 73
Dołączył: 2.05.2014

Ostrzeżenie: (0%)
-----


przy rejestracji proś o podanie imienia (required => true) a do edycji po prostu używaj innego *type, bez pola imienia wink.gif albo zostaw, ale daj disabled => true i po problemie.


--------------------
Overwatch24 - najbardziej zaawansowany Polski portal Overwatch od fanów dla fanów.

Fachowo.co

Behance.net/fachowo
Go to the top of the page
+Quote Post
daniel1302
post 19.03.2015, 08:04:38
Post #4





Grupa: Zarejestrowani
Postów: 602
Pomógł: 30
Dołączył: 1.08.2007
Skąd: Nowy Sącz

Ostrzeżenie: (0%)
-----


Prostrze wyjście od obu znalazłem tylko nie wiem czy jest eleganckie. Mam podstawowy formularz tylko w klasie Type a pole name dodaje w kontrolerze w zależności od tego czy chcę czy nie. Encję mam tak ustawioną, żeby puste pola domyślnymi nadpisywła.

Ten post edytował daniel1302 19.03.2015, 08:05:32
Go to the top of the page
+Quote Post
Forti
post 19.03.2015, 08:53:07
Post #5





Grupa: Zarejestrowani
Postów: 655
Pomógł: 73
Dołączył: 2.05.2014

Ostrzeżenie: (0%)
-----


Tak też można. Symfony daje spore pole do popisu formularzami gdy tylko zrozumiemy je. Ja na poczatku strasznie ich nie lubiłem i narzekałem lecz w gruncie rzeczy są bardzo użyteczne.


--------------------
Overwatch24 - najbardziej zaawansowany Polski portal Overwatch od fanów dla fanów.

Fachowo.co

Behance.net/fachowo
Go to the top of the page
+Quote Post
ohm
post 19.03.2015, 11:54:09
Post #6





Grupa: Zarejestrowani
Postów: 618
Pomógł: 143
Dołączył: 22.12.2010

Ostrzeżenie: (0%)
-----


Cytat(Forti @ 19.03.2015, 08:53:07 ) *
Ja na poczatku strasznie ich nie lubiłem i narzekałem lecz w gruncie rzeczy są bardzo użyteczne.

Offtop:
Fakt, jak zacząłem używać formularzy na dobre, to przy powrocie do dłubania ręcznego w pewnym projekcie, to niemalże jak dłubanie literek w tablicach kamiennych wink.gif

Cytat
Mam podstawowy formularz tylko w klasie Type a pole name dodaje w kontrolerze w zależności od tego czy chcę czy nie.

Też tak możesz, ale wg mnie Controller powinien przyjmować i przekazywać dane dalej, raczej bez ingerencji w te dane (czasem trzeba, wiadomo) a form builder powinien zarządzać formularzem i podejmować decyzje co i gdzie ma być.

Ten post edytował ohm 19.03.2015, 11:56:32
Go to the top of the page
+Quote Post
M4ver7071
post 23.03.2015, 20:12:18
Post #7





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 26.06.2014

Ostrzeżenie: (0%)
-----


Trochę offtop a nie chce zakładać nowego tematu. Do sprawdzenia czy użytkownik to administrator czy zwykły user lepiej do tego użyć pliku security.yml czy adnotacji ?
Go to the top of the page
+Quote Post
Forti
post 23.03.2015, 21:08:28
Post #8





Grupa: Zarejestrowani
Postów: 655
Pomógł: 73
Dołączył: 2.05.2014

Ostrzeżenie: (0%)
-----


$this->isGranted('role_admin') w controller id wersji 2.6.

A języku chodzi o zabezpieczenie pojedynch route/controller to ja preferuje annotacje.


--------------------
Overwatch24 - najbardziej zaawansowany Polski portal Overwatch od fanów dla fanów.

Fachowo.co

Behance.net/fachowo
Go to the top of the page
+Quote Post
M4ver7071
post 29.03.2015, 20:17:07
Post #9





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 26.06.2014

Ostrzeżenie: (0%)
-----


A mam pytanie. Bo mam formularz i dodałem jedno pole które nie znajduje się w Entity. I jak wysyłam ten formularz to jest możliwość to jedno (osobne dodane pole) nie było brane pod uwagę ? Bo wyświetla mi się, że brakuje metod get i set, a ja z tego pola dane chce do pliku zapisać.. Jak to zrobić ?
Go to the top of the page
+Quote Post
Forti
post 29.03.2015, 20:26:30
Post #10





Grupa: Zarejestrowani
Postów: 655
Pomógł: 73
Dołączył: 2.05.2014

Ostrzeżenie: (0%)
-----


Jak dodajesz do forma

  1. ->add('some_name');


to zrób tak:

  1. ->add('some_name', null, array(
  2. 'mapped' => false
  3. );


Później w controllerze tylko pobierasz to pole z tablicy $request->request->get('some_name'); i robisz z nim co chcesz wink.gif W encji nie musi być w żaden sposób zdefiniowane.


--------------------
Overwatch24 - najbardziej zaawansowany Polski portal Overwatch od fanów dla fanów.

Fachowo.co

Behance.net/fachowo
Go to the top of the page
+Quote Post
M4ver7071
post 29.03.2015, 20:44:56
Post #11





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 26.06.2014

Ostrzeżenie: (0%)
-----


Powiedz mi, jeżeli chodzi o content danej podstrony lepiej go wrzucić do pliku widoku czy raczej trzymać to bazie a razie wywołania wrzucić to do ogólnego pliku i tam formatować?
Go to the top of the page
+Quote Post
Forti
post 30.03.2015, 07:26:47
Post #12





Grupa: Zarejestrowani
Postów: 655
Pomógł: 73
Dołączył: 2.05.2014

Ostrzeżenie: (0%)
-----


w bazie trzymasz tylko tekst. Pobierasz ów tekst w kontroller / jakaś sobie custom serwis, i wrzucasz do widoku

  1. public function indexAction()
  2. {
  3. $entities = $this->getDoctrine()->getRepository('FortiCoreBundle:Article')->findBy(array(), array('created' => 'DESC'));
  4.  
  5. $this->breadcrumbs(array(array('Artykuły')));
  6.  
  7. return $this->render('FortiAdminBundle:Article:index.html.twig', array(
  8. 'entities' => $entities
  9. ));
  10. }


a w widoku po prostu:

  1. <head>
  2. </head>
  3. <body>
  4. <ul>
  5. {% for entity in entities %}
  6. <li>{{ entity.content }}</li
  7. {% endfor %}
  8. </ul>
  9. </body
  10. </html>


I to tyle z podstawowego użycia symfony wink.gif


--------------------
Overwatch24 - najbardziej zaawansowany Polski portal Overwatch od fanów dla fanów.

Fachowo.co

Behance.net/fachowo
Go to the top of the page
+Quote Post
M4ver7071
post 30.03.2015, 11:06:35
Post #13





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 26.06.2014

Ostrzeżenie: (0%)
-----


Okej ale skrypt powinnien robić dla każdej podkategorii widok i osobny plik z widokiem? Czy tylko jedne plik i ew. wrzucać do trgo pliku dane?
Go to the top of the page
+Quote Post
Forti
post 30.03.2015, 11:33:39
Post #14





Grupa: Zarejestrowani
Postów: 655
Pomógł: 73
Dołączył: 2.05.2014

Ostrzeżenie: (0%)
-----


Cytat(M4ver7071 @ 30.03.2015, 12:06:35 ) *
Okej ale skrypt powinnien robić dla każdej podkategorii widok i osobny plik z widokiem? Czy tylko jedne plik i ew. wrzucać do trgo pliku dane?


Tak na szybkiego:

Jak zmienia się struktura html to osobny widok. Jak nie zmienia to oczywiście ten sam widok, prawda? ;]


--------------------
Overwatch24 - najbardziej zaawansowany Polski portal Overwatch od fanów dla fanów.

Fachowo.co

Behance.net/fachowo
Go to the top of the page
+Quote Post
M4ver7071
post 31.03.2015, 19:37:29
Post #15





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 26.06.2014

Ostrzeżenie: (0%)
-----


Okej, chce zrobić tak że część danych jest w bazie a cześć danych odczytuje z pliku.. Problem polega na tym, że jak próbuje to zrobić to SF2 krzyczy mi, że nie ma metod get itd. zastanawiam się czy ta droga budowy jest prawidłowa.

Czy nie lepiej by było mimo wszystko trzymać danych w bazie, utworzyć plik z danym szablonem i tam przekazywać wszelki kontent..



Również z drugiej strony nasuwa się problem bezpieczeństwa, czy jeżeli w bazie będą znaczniki HTML będzie to prawidłowe rozwiązanie czy tez nie.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.03.2024 - 21:08