Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [inne][Symfony2] Formularze
Forum PHP.pl > Forum > Przedszkole
kosmos
Witam.
Robię przykład związany z formularzami ze strony z dokumentacją o Symfony --> http://symfony-docs.pl/book/forms.html

Tak więc mam klasę:

// src/Acme/TaskBundle/Entity/Message.php
namespace Acme\PageBundle\Entity;

  1. class Message
  2. {
  3. protected $message;
  4. protected $name;
  5.  
  6.  
  7.  
  8. public function getMessage()
  9. {
  10. return $this->message;
  11. }
  12. public function setMessage($message)
  13. {
  14. $this->message = $message;
  15. }
  16.  
  17. public function getName()
  18. {
  19. return $this->name;
  20. }
  21. public function setName($name)
  22. {
  23. $this->name = $name;
  24. }
  25. }




metodę w kontrolerze:

  1. public function messageAction(Request $request){
  2. $message = new Message();
  3. $message->setMessage('Nowa Wiadomość');
  4. $message->setName('PIOTR');
  5.  
  6. $form = $this->createFormBuilder($message)
  7. ->add('message','text')
  8. ->add('name','text')
  9. ->getForm();
  10.  
  11. return $this->render('AcmePageBundle:Default:contact.html.php', array(
  12. 'form' => $form->createView(),
  13. ));
  14.  
  15. }


Trasę:

  1. acme_send_mail:
  2. path: /mail/
  3. defaults: { _controller: AcmePageBundle:Default:message }



oraz wywołanie w widoku:

  1. <form action="<?php echo $view['router']->generate('acme_send_mail') ?>" method="post" <?php echo $view['form']->enctype($form) ?> >
  2. <?php echo $view['form']->widget($form) ?>
  3.  
  4. <input type="submit" />
  5. </form>


Załadowanie strony kończy się komunikatem błędu:

  1. Notice: Undefined variable: form in C:\xampp\htdocs\symfony\src\Acme\PageBundle\Resources\views\Default\contact.html
    .php line 33


W widoku nie rozpoznaje mi zmiennej form, przykłąd jest niekompletny? Jak przekazać tą zmienną do widoku?

PS: jest możliwość sprawdzenia wersji Symfony?
Forti
Już Tobie mówiłem wielo krotnie - korzystaj z twiga to ci połowa problemów zniknie. Ale nie, jesteś uparty i wracasz z głupotami...

Wersje symfony masz w composer.json przykładowo.


Nie wiem, dla mnie to wygląda ok - jest przekazanie 'form' to widoku, jeżeli twój formularz rozpoczyna się od lini 33 to wszystko powinno być ok.
kosmos
Nie chodzi o moją upartość, to nie to.
Powtarzam ... wezmę się za TWIG jeśli będę się czuł dobrze z PHP. Nie wszystko na raz.
Ma jeszcze ktoś jakiś pomysł skąd ten komunikat błędu?
Forti
Cytat(kosmos @ 26.03.2015, 21:17:04 ) *
Nie chodzi o moją upartość, to nie to.
Powtarzam ... wezmę się za TWIG jeśli będę się czuł dobrze z PHP. Nie wszystko na raz.
Ma jeszcze ktoś jakiś pomysł skąd ten komunikat błędu?


A co jest niby w twigu trudnego, co? To nie jest język programowania, wiesz? wink.gif Twig to tylko "szablony" - wraper na php, swego rodzaju "api". Zamiast pisać 20 znaków aby wypisać zmienną piszesz ich 4... też mi filozofia -,-

  1. {{ var }}
  2. <?php echo $var ?>


Dodatkowo extends, block i rozszerzenia twiga to tylko ułatwienia, a nauka ich to.. żadna, bo przykłady w dokumentacji masz pod twiga. Więc roboty to szukać odpowiednik dla php moim zdaniem.
kosmos
Cytat(Forti @ 26.03.2015, 21:30:23 ) *
To nie jest język programowania, wiesz? wink.gif

Właśnie wiem smile.gif


W tym przyadku jeśli wypiszę:

  1. {{ form(form) }}


Nie ma komunikatu błędu ale formularz nie jest drukowany.
Forti
Jutro z rana zajrzę do twojego kodu przy generowaniu forma. Teraz juz nie myślę.
kosmos
Ok dzięki Forti ...
U mnie podobnie.
Turson
Którą wersję SF2 w końcu masz?
skowron-line
Cytat(Forti @ 26.03.2015, 21:11:08 ) *
Wersje symfony masz w composer.json przykładowo.


Kod
composer show --installed | grep symfony
albo bardziej PRO
composer show --installed symfony/symfony

@kosmos skoro błąd masz w 33 linijce to co się dzieje w poprzednich 32 ? może tam gdzieś coś robisz ze zmienna.

Edit
@Forti skąd u Ciebie taki ból dupy na tego twiga.
Forti
Ponieważ świetnie współgra z symfony i ułatwia prace. W środowisku produkcyjnym i tak jest cache do php mieszanym z html wiec na wydajności nie tracimy kompletnie nic.

Każdy na swoje poglądy. Jak się facet uczy symfony to niech robi to porządnie wink.gif gdy pójdzie na etat to i tak na 99% (pokuszę się nawet na 100%) będzie musial się go nauczyć. Jak pracodawcy mówisz ze umiesz symfony to samo przez się rozumiane jest np. Doctrine i twig. No wybaczcie jeżeli sie mylę.
kosmos
Siedzę teraz w robocie, więc sprawdzę najwcześniej około 18.
Nad linijka 33 nic nie robię ze zmienną $form. Cały kod moge wrzucić o godz. j.w.
skowron-line
@Forti wybaczam że się mylisz.
Forti
Cytat(skowron-line @ 27.03.2015, 11:16:07 ) *
@Forti wybaczam że się mylisz.


Pokaż mi pracodawce, który szuka pracownika ze znajomością symfony ale nie potrzebuje znajomości twiga. Mogę wysłać zapytanie pod każdą oferte jaką przedstawisz i jeżeli nie będzie to ustawione to gwarantuje, że odpisze "twig także".

Proszę.. przestać głupoty opowiadać. Nawet front-end wolą twiga, a przynajmniej nie spotkałem takiego co by wolał szablony w czystym php niż twig.
skowron-line
Cytat(Forti @ 27.03.2015, 12:31:17 ) *
Pokaż mi pracodawce, który szuka pracownika ze znajomością symfony ale nie potrzebuje znajomości twiga.

http://www.goldenline.pl/praca/oferta/326383
Backend developer nie musi znać Twiga.
Forti
Cytat(skowron-line @ 27.03.2015, 15:34:10 ) *
http://www.goldenline.pl/praca/oferta/326383
Backend developer nie musi znać Twiga.


Nie wiem skąd masz takie informacje ;]
skowron-line
Cytat(Forti @ 27.03.2015, 15:59:57 ) *
Nie wiem skąd masz takie informacje ;]

Bo tam pracuje. Szach mat smile.gif

Edit:
No ale dobra zeby nie smiecic, przyznaje Ci 100% racji twiga trzeba znać ale pozwól aby chłopak sam doszedł do takich wniosków. Bo o ile ty czy ja czy 99% firm uzywa twiga to nie znaczy ze nie trafi do projektu w ktorym ktos sie skicha na php
kosmos
Panowie, nie to jest tu tematem, czy mam używać PHP czy TWIGa.
To mój composer.json
  1. {
  2. "name": "symfony/framework-standard-edition",
  3. "license": "MIT",
  4. "type": "project",
  5. "description": "The \"Symfony Standard Edition\" distribution",
  6. "autoload": {
  7. "psr-0": { "": "src/", "SymfonyStandard": "app/" }
  8. },
  9. "require": {
  10. "php": ">=5.3.3",
  11. "symfony/symfony": "2.5.*",
  12. "doctrine/orm": "~2.2,>=2.2.3",
  13. "doctrine/doctrine-bundle": "~1.2",
  14. "twig/extensions": "~1.0",
  15. "symfony/assetic-bundle": "~2.3",
  16. "symfony/swiftmailer-bundle": "~2.3",
  17. "symfony/monolog-bundle": "~2.4",
  18. "sensio/distribution-bundle": "~3.0",
  19. "sensio/framework-extra-bundle": "~3.0",
  20. "incenteev/composer-parameter-handler": "~2.0"
  21. },
  22. "require-dev": {
  23. "sensio/generator-bundle": "~2.3"
  24. },
  25. "scripts": {
  26. "post-root-package-install": [
  27. "SymfonyStandard\\Composer::hookRootPackageInstall"
  28. ],
  29. "post-install-cmd": [
  30. "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
  31. "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
  32. "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
  33. "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
  34. "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile",
  35. "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::removeSymfonyStandardFiles"
  36. ],
  37. "post-update-cmd": [
  38. "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
  39. "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
  40. "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
  41. "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
  42. "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile",
  43. "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::removeSymfonyStandardFiles"
  44. ]
  45. },
  46. "config": {
  47. "bin-dir": "bin"
  48. },
  49. "extra": {
  50. "symfony-app-dir": "app",
  51. "symfony-web-dir": "web",
  52. "incenteev-parameters": {
  53. "file": "app/config/parameters.yml"
  54. },
  55. "branch-alias": {
  56. "dev-master": "2.5-dev"
  57. }
  58. }
  59. }


Ładując widok Contact.html.php jeszcze nie mam w nim zmiennej $form. Zmienną tą wywołuje dopiero wówczas gdy na tym wodoku wywołam odpowiednią akcję
  1. <li><a href="<?php echo $view['router']->generate('acme_send_mail') ?>">WYŚLIJ</a></li>
troche to nieprzemyślane ale nie o to teraz chodzi.
Dodałem więc sprawdzenie czy zmienna $form istnieje:
  1. <div class="formmessage">
  2. <?php if(isset($form)){
  3. echo $view['form']->form($form);
  4. }
  5.  
  6. else if (!(isset($form))) {
  7. print('ZMIENNA $FORM JEST PUSTA');
  8. } ?>
  9. </div>

Formularz wyświetla się specool.gif
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.