• 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
53 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 (159,030 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 (159,030 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ź 70 wizyt
pytanie zadane 27 lipca 2016 w PHP, Symfony, Zend przez GaCeL Dyskutant (7,570 p.)
0 głosów
1 odpowiedź 73 wizyt
0 głosów
0 odpowiedzi 133 wizyt
pytanie zadane 22 marca w PHP, Symfony, Zend przez mordimer Obywatel (1,860 p.)
Porady nie od parady
Publikując kody źródłowe korzystaj ze specjalnego bloczku koloryzującego składnię (przycisk z napisem code w edytorze). Nie zapomnij o ustawieniu odpowiedniego języka z rozwijanego menu oraz czytelnym formatowaniu kodu.Przycisk code

62,438 zapytań

108,589 odpowiedzi

226,699 komentarzy

35,996 pasjonatów

Przeglądających: 59
Pasjonatów: 6 Gości: 53

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.

...