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

Symfony - ParaConverter nie robi update

Object Storage Arubacloud
0 głosów
141 wizyt
pytanie zadane 11 sierpnia 2018 w PHP 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 Ekspert (212,670 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 Ekspert (212,670 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,960 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,960 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ź 161 wizyt
pytanie zadane 27 lipca 2016 w PHP przez GaCeL Dyskutant (7,500 p.)
0 głosów
1 odpowiedź 228 wizyt
pytanie zadane 15 lutego 2019 w PHP przez Aleksander Kowalski Obywatel (1,510 p.)
0 głosów
1 odpowiedź 258 wizyt

92,556 zapytań

141,404 odpowiedzi

319,560 komentarzy

61,942 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...