Witam, zacząłem uczyć się Symfony 2. Mam taki problem:
Mam formularz generowany przez klasę UserType:
W Klasie UserType posiadam generowane 3 kontrolki:
$builder ->add('name', 'text', http://www.php.net/array( 'label' => 'Imię' )) ->add('mail', 'text', http://www.php.net/array( 'label' => 'Adres email' )) ->add('password', 'text', http://www.php.net/array( 'label' => 'Hasło' ));
$form = $this->createForm(new UserType(), $entity, http://www.php.net/array( 'action' => $this->generateUrl('user_create'), 'method' => 'POST', )); $form->add('submit', 'submit', http://www.php.net/array('label' => 'Create')); return $form;
$form = $this->createForm(new UserType(), $entity, http://www.php.net/array( 'action' => $this->generateUrl('user_update', http://www.php.net/array('id' => $entity->getUserId())), 'method' => 'PUT', )); $form->add('submit', 'submit', http://www.php.net/array('label' => 'Edytuj użytkownika')); return $form;
Stwórz formularz bez imienia ('name') i użyj do tego form events -> http://symfony.com/doc/current/cookbook/form/dynamic_form_modification.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"
przy rejestracji proś o podanie imienia (required => true) a do edycji po prostu używaj innego *type, bez pola imienia albo zostaw, ale daj disabled => true i po problemie.
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.
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.
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 ?
$this->isGranted('role_admin') w controller id wersji 2.6.
A języku chodzi o zabezpieczenie pojedynch route/controller to ja preferuje annotacje.
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ć ?
Jak dodajesz do forma
->add('some_name');
->add('some_name', null, http://www.php.net/array( 'mapped' => false );
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ć?
w bazie trzymasz tylko tekst. Pobierasz ów tekst w kontroller / jakaś sobie custom serwis, i wrzucasz do widoku
public function indexAction() { $entities = $this->getDoctrine()->getRepository('FortiCoreBundle:Article')->findBy(http://www.php.net/array(), http://www.php.net/array('created' => 'DESC')); $this->breadcrumbs(http://www.php.net/array(http://www.php.net/array('Artykuły'))); return $this->render('FortiAdminBundle:Article:index.html.twig', http://www.php.net/array( 'entities' => $entities )); }
<http://december.com/html/4/element/html.html> <http://december.com/html/4/element/head.html> </http://december.com/html/4/element/head.html> <http://december.com/html/4/element/body.html> <http://december.com/html/4/element/ul.html> {% for entity in entities %} <http://december.com/html/4/element/li.html>{{ entity.content }}</http://december.com/html/4/element/li.html {% endfor %} </http://december.com/html/4/element/ul.html> </http://december.com/html/4/element/body.html </http://december.com/html/4/element/html.html>
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?
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.
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)