Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony2][Symfony]Entity not found
Forum PHP.pl > Forum > PHP > Frameworki
Crash89
Witam, borykam się z takim problem, otóż tworzę akcję kontrollera rozbitą na dwa kroki.
O ile w pierwszym kroku wszystko działa o tyle w drugim mam taki błąd, przy wejściu do drugiego kroku.

  1. AppBundle\Entity\GroupWords object not found.
  2. 404 Not Found - NotFoundHttpException


Oto kod tych akcji:

  1. /**
  2.   * Creates a new GroupWords entity.
  3.   *
  4.   * @Route("/new", name="groupwords_new")
  5.   * @Method({"GET", "POST"})
  6.   */
  7. public function newAction(Request $request)
  8. {
  9. $groupWord = new GroupWords();
  10. $form = $this->createForm('AppBundle\Form\GroupWordsType', $groupWord);
  11. $form->handleRequest($request);
  12.  
  13. if ($form->isSubmitted() && $form->isValid()) {
  14. //$em = $this->getDoctrine()->getManager();
  15. // $em->persist($groupWord);
  16. // $em->fluvar_dump('saafa');
  17.  
  18.  
  19. return $this->redirectToRoute('groupwords_new_step2', array('groupWord' => $groupWord));
  20. }
  21.  
  22. return $this->render('groupwords/new.html.twig', array(
  23. 'groupWord' => $groupWord,
  24. 'form' => $form->createView(),
  25. ));
  26. }
  27. /**
  28.  * @Route("/new_step2/{groupWord}", name="groupwords_new_step2")
  29.  * @Method({"GET","POST"})
  30.  * @param Request $request
  31.  *
  32.  *
  33.  */
  34. public function newStep2Action(Request $request, GroupWords $groupWord){
  35. $form = $this->createForm('AppBundle\Form\GroupWordsStep2Type', $groupWord);
  36. $form->handleRequest($request);
  37.  
  38. if ($form->isSubmitted() && $form->isValid()) {
  39. $em = $this->getDoctrine()->getManager();
  40. $em->persist($groupWord);
  41. $em->flush();
  42.  
  43. return $this->redirectToRoute('groupwords_show', array('id' => $groupWord->getId()));
  44. }
  45. return $this->render('groupwords/newStep2.html.twig', array(
  46. 'groupWord' => $groupWord,
  47. 'form' => $form->createView(),
  48. ));
  49.  
  50. }



Próbowałem to poustawiać przez @ParamConverter ale za wiele to nie zmieniło.

Pozdrawiam
ohm
a czemu
Kod
          //  $em->persist($groupWord);


to masz zakomentowane?

Nie zapisujesz nigdzie danego $groupWord żeby drugi controller mógł go znaleźć, więc poprawnie exception wyrzuca.

Albo zapiszesz ten groupWord (brakuje jeszcze $em->flush()) albo przekażesz parametry dla nowego $groupWord w drugiej akcji.
Crash89
Cytat(ohm @ 19.04.2016, 20:42:12 ) *
a czemu
Kod
          //  $em->persist($groupWord);


to masz zakomentowane?

Nie zapisujesz nigdzie danego $groupWord żeby drugi controller mógł go znaleźć, więc poprawnie exception wyrzuca.

Albo zapiszesz ten groupWord (brakuje jeszcze $em->flush()) albo przekażesz parametry dla nowego $groupWord w drugiej akcji.


Ponieważ dane do bazy danych chce dodawać dopiero w drugim kroku, to jest dodawanie jednego wiersza entity w dwóch krokach.
W pierwszym chcę pobrać wszystkie dane oprócz slów, a dopiero w drugim kroku słowa.
ohm
No to musisz przekazać te dane między requestami
Crash89
Cytat(ohm @ 20.04.2016, 14:50:20 ) *
No to musisz przekazać te dane między requestami

W jaki sposób to zrobić? odebrać dane z obiektu Request?
W tym wypadku gdy pierwszy raz uruchomię drugi krok to będe mieć ten obiekt pusty.
kpt_lucek
Polecam
Crash89
Cytat(kpt_lucek @ 22.04.2016, 01:08:26 ) *



Użyłem tego craue i wszystko działa, ale mam problem gdy chcę wyświetlić wyniki w kroku drugim w zależności wyboru w kroku pierwszym.
Chcę wyświetlić do wyboru tylko te słowa, które dotyczą wybranego języka.

Mam przy kroku drugim taki błąd:

  1. The option "language" does not exist. Defined options are: "action", "allow_extra_fields", "attr", "auto_initialize", "block_name",


A gdy dodam metodę configureOptions gdzie się ustawia te domyślne wartośći, to wyrzuca mi coś takiego:

  1. Compile Error: Declaration of AppBundle\Form\CreateGroupWordsForm::configureOptions() must be compatible with Symfony\Component\Form\FormTypeInterface::configureOptions(Symfony\Component\OptionsResolver\OptionsResolver $resolver)

kpt_lucek
1wszy case:
Podany typ formularza nie posiada opcji "languages".

---
2gi case:

Tłumacząc z technicznego:
1. Twój formularz nie spełnia warunków opisanych w Interface,
2. lub extend na Abstract jest wykonany nie prawidłowo = czytaj pkt. 1
Crash89
Cytat(kpt_lucek @ 22.04.2016, 15:02:00 ) *
1wszy case:
Podany typ formularza nie posiada opcji "languages".

---
2gi case:

Tłumacząc z technicznego:
1. Twój formularz nie spełnia warunków opisanych w Interface,
2. lub extend na Abstract jest wykonany nie prawidłowo = czytaj pkt. 1


Aby dodać jakąś własną opcję do formtype w tej metodzie trzeba taką zmienną zainicjować domyślna wartością w tablicy.
Problem polega na tym, że gdy ta metodę dodaję to występuje ten błąd.
kpt_lucek
Cytat(Crash89 @ 23.04.2016, 12:37:00 ) *
Aby dodać jakąś własną opcję do formtype w tej metodzie trzeba taką zmienną zainicjować domyślna wartością w tablicy.
Problem polega na tym, że gdy ta metodę dodaję to występuje ten błąd.

A może po prostu powiedz co chcesz osiągnąć i jakimi krokami (najlepiej, z punktu widzenia biznesu) to pomyślimy?
Crash89
Chcę stworzyć grupę słówek wraz z ich tłumaczeniami na konkretny język.
Więc w pierwszym kroku wybierane są dwa języki: bazowy (np. polski) ten, z którego bedą wybierane słowa w kroku drugim, dlatego chcę tą wartośc przekazać do kroku drugiego.
i drugi, na który maja być tłumaczone słowa.
W kroku drugim na podstawie wybranego pierwszego języka, wyświetlane są słowa do wyboru w tym języku. Użytkownik może sobie do tej grupy zapisać wiele słów.
Tłumaczenia to oddzielna encja.
gdyby nie ten problem to to było by już skończone.
kpt_lucek
Szczerze, to nie wiem czy jest sens robić to w sposób jaki Ty to robisz.

Czemu nie użyjesz mechanizmu zawartego w SF2/3? Przecież moduł tłumaczeń masz dostępny od ręki?


--Mniejsza o to wyżej

To co chcesz zrobić, najpewniej zbytnio sobie utrudniasz, pokaż kompletny (najlepiej) kod, opisz dlaczego podszedłeś tak a nie inaczej to będziemy mogli Ci pomóc. W chwili obecnej jest to nieco jak wróżenie z fusów.

--Edit

Dobra, nie wiem czemu ale nie zauważyłem (pewnie pora dnia - nocy robi swoje) Twojego kodu.

1. ParamConverter jest bardziej niż wskazany, nie ma potrzeby napieprzania (wybacz mod) kolejnych ton kodu tylko dlatego, że chcesz zrobić to sam. Jeżeli nie potrafisz tego zrobić, to już zupełnie inna bajka.
Łap z dokumentacji, customowe mapowanie:
  1. /**
  2.  * @Route("/blog/{date}/{slug}/comments/{comment_slug}")
  3.  * @ParamConverter("post", options={"mapping": {"date": "date", "slug": "slug"}})
  4.  * @ParamConverter("comment", options={"mapping": {"comment_slug": "slug"}})
  5.  */
  6. public function showAction(Post $post, Comment $comment)
  7. {
  8. }


Czaisz jak to działa? (Zakładam, że z mapowaniem mogłeś mieć problem)

2. Wspomniany już brak $em->flush();
Cytat
Pamiętaj, że korzystając z EntityManager'a możesz użyć $em->flush($mojaEncja); aby zapobiec save'owaniu "niechcianych" zmian, lub jak nie masz pewności co do tego, co robisz...


3. Do FormType nie da się "tak łatwo" dodać customowych atrybutów, tutaj masz więcej o tym.
Crash89
Jest sens bo każde słówko w jakimkolwiek języku może dodawać użytkownik.
Tworzę stronę gdzie się dodaje słówka z różnych języków.


Miałem juz okazję pracować z Craue i ten sposób przekazania parametru opcji działał.

Poniżej umieszczę kod:

  1.  
  2. namespace AppBundle\Form;
  3.  
  4. use Symfony\Component\Form\AbstractType;
  5. use Symfony\Component\Form\FormBuilderInterface;
  6. use Doctrine\ORM\EntityRepository;
  7.  
  8. class CreateGroupWordsForm extends AbstractType {
  9.  
  10. //put your code here
  11.  
  12. public function buildForm(FormBuilderInterface $builder, array $options) {
  13. if (!empty($options['language'])) {
  14. $language = $options['language'];
  15. }
  16. switch ($options['flow_step']) {
  17. case 1:
  18. $builder
  19. ->add('name')
  20. ->add('language_1')
  21. ->add('language_2')
  22. ->add('category')
  23. ->add('user')
  24. ;
  25. break;
  26. case 2:
  27. // This form type is not defined in the example.
  28. $builder
  29. ->add('words', null, array('query_builder' => function (EntityRepository $er) use ($language) {
  30. return $er->createQueryBuilder('u')
  31. ->where('u.language = :language')
  32. ->steParameter(':language',$language);
  33. }));
  34. break;
  35. }
  36. }
  37.  
  38.  
  39.  
  40. public function configureOptions( OptionsResolver $resolver ) {
  41. $resolver->setDefaults( array(
  42. 'data_class' => 'AppBundle\Entity\GroupWords',
  43. 'language' => null
  44.  
  45. ) );
  46. }
  47.  
  48.  
  49. public function getBlockPrefix() {
  50. return 'createVehicle';
  51. }
  52.  
  53. public function getName() {
  54. return 'GroupWords';
  55. }
  56.  
  57. }
  58.  
  59.  
  60. namespace AppBundle\Form;
  61.  
  62. use Craue\FormFlowBundle\Form\FormFlow;
  63. use Craue\FormFlowBundle\Form\FormFlowInterface;
  64. class CreateGroupWordsFlow extends FormFlow{
  65. //put your code here
  66.  
  67. protected function loadStepsConfig() {
  68. return array(
  69. 'label' => 'data:',
  70. 'form_type' => 'AppBundle\Form\CreateGroupWordsForm',
  71. ),
  72. 'label' => 'words:',
  73. 'form_type' => 'AppBundle\Form\CreateGroupWordsForm',
  74.  
  75. ),
  76. 'label' => 'confirmation',
  77. ),
  78. );
  79. }
  80. public function setDefaultOptions(OptionsResolverInterface $resolver)
  81. {
  82. $resolver->setDefaults(array('language' => false));
  83. // Others if needed, like in the documentation for : 'data_class' => 'VENDOR\Bundle\Entity\MyEntity', 'csrf_protection' => true
  84. }
  85. public function getFormOptions($step, array $options = array()) {
  86. $options = parent::getFormOptions($step, $options);
  87.  
  88. $formData = $this->getFormData();
  89.  
  90. if ($step === 2) {
  91. $options['language'] = $formData->getLanguage1();
  92.  
  93. }
  94.  
  95. return $options;
  96. }
  97.  
  98.  
  99. }


Błąd jest przy metodzie configureOptions, gdyby nie to to by to było skończone.
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.