Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Symfony2][Symfony]Entity not found, Nie można odnaleźć entity
Crash89
post
Post #1





Grupa: Zarejestrowani
Postów: 191
Pomógł: 7
Dołączył: 3.04.2013

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


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
Go to the top of the page
+Quote Post
ohm
post
Post #2





Grupa: Zarejestrowani
Postów: 623
Pomógł: 144
Dołączył: 22.12.2010

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


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.
Go to the top of the page
+Quote Post
Crash89
post
Post #3





Grupa: Zarejestrowani
Postów: 191
Pomógł: 7
Dołączył: 3.04.2013

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


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.
Go to the top of the page
+Quote Post
ohm
post
Post #4





Grupa: Zarejestrowani
Postów: 623
Pomógł: 144
Dołączył: 22.12.2010

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


No to musisz przekazać te dane między requestami
Go to the top of the page
+Quote Post
Crash89
post
Post #5





Grupa: Zarejestrowani
Postów: 191
Pomógł: 7
Dołączył: 3.04.2013

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


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.
Go to the top of the page
+Quote Post
kpt_lucek
post
Post #6





Grupa: Zarejestrowani
Postów: 428
Pomógł: 77
Dołączył: 10.07.2011
Skąd: Warszawa

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


Polecam
Go to the top of the page
+Quote Post
Crash89
post
Post #7





Grupa: Zarejestrowani
Postów: 191
Pomógł: 7
Dołączył: 3.04.2013

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


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)

Go to the top of the page
+Quote Post
kpt_lucek
post
Post #8





Grupa: Zarejestrowani
Postów: 428
Pomógł: 77
Dołączył: 10.07.2011
Skąd: Warszawa

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


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

Ten post edytował kpt_lucek 22.04.2016, 14:02:48
Go to the top of the page
+Quote Post
Crash89
post
Post #9





Grupa: Zarejestrowani
Postów: 191
Pomógł: 7
Dołączył: 3.04.2013

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


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.

Ten post edytował Crash89 23.04.2016, 11:37:35
Go to the top of the page
+Quote Post
kpt_lucek
post
Post #10





Grupa: Zarejestrowani
Postów: 428
Pomógł: 77
Dołączył: 10.07.2011
Skąd: Warszawa

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


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?
Go to the top of the page
+Quote Post
Crash89
post
Post #11





Grupa: Zarejestrowani
Postów: 191
Pomógł: 7
Dołączył: 3.04.2013

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


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.
Go to the top of the page
+Quote Post
kpt_lucek
post
Post #12





Grupa: Zarejestrowani
Postów: 428
Pomógł: 77
Dołączył: 10.07.2011
Skąd: Warszawa

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


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.

Ten post edytował kpt_lucek 26.04.2016, 02:15:24
Go to the top of the page
+Quote Post
Crash89
post
Post #13





Grupa: Zarejestrowani
Postów: 191
Pomógł: 7
Dołączył: 3.04.2013

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


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.

Ten post edytował Crash89 26.04.2016, 12:12:08
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 13.10.2025 - 10:43