• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Symfony - ParaConverter nie robi update

0 głosów
54 wizyt
pytanie zadane 11 sierpnia 2018 w PHP, Symfony, Zend przez sebastian_23 Początkujący (380 p.)

Witam, mam taki o to problem że skopiowałem mój request dodający przez formularz dane do DB aby utworzyć request edytujący te dane poprzez formularz (dokumentacja symfony). Wszystko działa tylko zamiast po edycji zrobić update tych kolumn to dodaje mi nowy rekord;/ 

kod z kontrollera:

     /**
      * @Route("/app/edit/{id}", name="app_edit_app")
      *
      * @param Request $request
      * @param Apps $apps
      *
      * @return Response
      */
    public function editElement(Request $request, Apps $apps)
    {

        //$apps = $em->getRepository(Apps::class)->find($id);
        $form = $this->createForm(AddAppType::class, $apps);
        $form->handleRequest($request);

        if ($request->isMethod("post")) {
            $apps = $form->getData();

            $apps->setCreatedAt(new \DateTime());

            $em = $this->getDoctrine()->getManager();
            $em->persist($apps);
            $em->flush();
            //
            return $this->redirectToRoute('app_index', [
                'id' => $apps->getId()
            ]);
        }


        return $this->render('app/edit', [
            'id' => $apps->getId(),
            'form' => $form->createView(),
        ]);
    }

Widok:

{{ form_start(form) }}
<button type="submit" class="btn btn-primary">Zapisz</button>
{{ form_end(form) }}

dodam że dane automatycznie się uzupełniają w widoku formularza.

1 odpowiedź

0 głosów
odpowiedź 11 sierpnia 2018 przez Ehlert Mędrzec (165,080 p.)
<?php

if ($request->isMethod("post")) {

W taki sposób to sprawdzało się formularze w Symfony 1. Zerknij do dokumentacji bo jest tam wszystko wyjaśnione. Zawsze masz też debug profiler który zna odpowiedź prawie na tyle pytań co stackoverflow na temat Symfony. 

komentarz 11 sierpnia 2018 przez sebastian_23 Początkujący (380 p.)
wiem wiem... powinno być pewnie tak:
        if ($form->isSubmitted() && $form->isValid()) {

:)

Znalazłem odpowiedź.. przy budowaniu formularza

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->setAction($this->router->generate('app_add_app'))

ustawiłem sobie akcje na ścieżkę dla dodawania... no :) 

Dzięki Ehlert natchnąłeś mnie do tego :D

komentarz 11 sierpnia 2018 przez Ehlert Mędrzec (165,080 p.)
Akcji formularza nie powinno się ustawiać w klasie ani w builderze. Akcja powinna być definiowana w szablonie, podobnie jak button submit.
komentarz 11 sierpnia 2018 przez sebastian_23 Początkujący (380 p.)
Dzięki piękne za tą informację teraz będę wiedział jak to robić na przyszłość, w dokumentacji były podane 3 przykłady ustawienia action ja wybrałem zły:) właśnie zmieniam w aplikacji wszystkie ścieżki według tego jak napisałeś:)

mam jeszcze takie pytanie..

jak wyrenderować tylko wybrane pola w widoku formularza a następnie tylko te wybrane pola zaktualizować w DB?
komentarz 11 sierpnia 2018 przez suice Gaduła (3,400 p.)
edycja 12 sierpnia 2018 przez suice
jezeli chcesz customizowac pole formularzy dynamicznie zainteresuj sie FormEvents (w ogole tez przydaloby sie wiedziec czym jest EventDispatcher) no i jak dziala validation_group w formach.

na skróty, przeczytaj sobie to:

https://symfony.com/doc/current/form/dynamic_form_modification.html

https://symfony.com/doc/current/validation/groups.html

 

tworzysz listenera, ktory wedlug jakis kryteriow dodaje nowe pola i ustawiasz validation_group dla danego formularza.w zaleznosci od danych wejsciowych

 

___

dodatkowo zainteresuj sie doctrine lifecycle event i tam przy zdarzeniu persist umiesc date stworzenia rekordu i wtedy usun to koniecznie z controllera
komentarz 12 sierpnia 2018 przez sebastian_23 Początkujący (380 p.)

doctrine lifecycle event - chodzi o to żebym tam dała przy

setCreatedAt() {

$this->createdAt = new \DateTime();

return $this;
}

?

komentarz 12 sierpnia 2018 przez suice Gaduła (3,400 p.)
edycja 12 sierpnia 2018 przez suice
totalnie padniety bylem piszac wczorajsza odpowiedz, umiesc raczej to w konstruktorze encji, teoretycznie mozna zrobic to przez callbacka przy zdarzeniu prePersist

poczytaj - https://symfony.com/doc/current/doctrine/lifecycle_callbacks.html

Podobne pytania

+1 głos
1 odpowiedź 73 wizyt
pytanie zadane 27 lipca 2016 w PHP, Symfony, Zend przez GaCeL Dyskutant (7,570 p.)
0 głosów
1 odpowiedź 75 wizyt
0 głosów
1 odpowiedź 35 wizyt
pytanie zadane 6 dni temu w PHP, Symfony, Zend przez mi-20 Stary wyjadacz (10,360 p.)
Porady nie od parady
Zadając pytanie postaraj się o poprawną pisownię i czytelne formatowanie tekstu.Kompozycja

64,791 zapytań

111,249 odpowiedzi

233,951 komentarzy

46,683 pasjonatów

Przeglądających: 179
Pasjonatów: 7 Gości: 172

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...