Wpis z mikrobloga

mirki, dodaje sobie do mojego forma dwie formy:
$builder
->add('finalCarUser', (new FinalCarUserPrivateDataType())
->add('secondFinalCarUser', (new FinalCarUserPrivateDataType());

czemu o to:
vardump($rentOrder->getFinalCarUser()->getFirstName());
var
dump($form->get('finalCarUser')->getData()->getFirstName());
vardump($request->get('autowimarcorebundlerentorderoperatoredition'));
die();

zwraca firstName Wojciech mimo że w requescie ma Tomasz ?
http://pastebin.com/Fb733SPA

#php #symfony #webdev
  • 18
@Vinniczek: aj sorki, dodaje po prosta dwa rozne pola z różną formą, zaktualizowałem wpis, Wojciech jest w drugim polu, ale w I z czapy i tak pojawia się Wojciech a powinien być Tomasz......
@Vinniczek: nie, mam oddzielnie jako pola w bazie to bo akurat będzie tylko dwóch użytkowników, nie więcej tutaj nawet nie chodzi mi o żadne dodawanie, to juz na etapie formy się wysypuje....
vardump($rentOrder->getFinalCarUser()->getFirstName());

vardump($form->get('finalCarUser')->getData()->getFirstName());

vardump($request->get('autowimarcorebundlerentorderoperatoredition'));


@Jurigag:

1. https://wykop-code.appspot.com/ bo wypok interpretuje a la markdown.
2. Nie wiem co to jest $rentOrder i jak wygląda FinalCarUserPrivateDataType i skąd wziąłeś autowimarcorebundlerentorderoperatoredition.
3. Kiedy robisz var_dumpa? Po handleRequest, isSubmitted i isValid?
@MacDada: po handleRequest, $rentOrder to po prostu entity, FinalCarUserPrivateDataType to klasa rozszerzająca AbstractType(form kolejny po prostu) a autowimarcorebundlerentorderoperatoredition to nazwa formy w której znajdują się te dwa pola, jak wywale to drugię pole to jest okej, ale to nie rozwiązanie, czy możliwe jest że doctrine coś tu gdzieś robi ?
@Jurigag: W sensie jak wygląda kod, bo ciężko zgadywać gdzie masz buga.

Weź wklej akcję kontrolera + form type'y + encję => oczywiście najpierw wykoś co tam zbędne dla pokazania problemu.
@MacDada: encja w RentOrder i FinalCarUser - same pola, w kontrolerze dla testów zrobiłem tyle co pobranie samego rentordera z bazy, stworzenie formularze i handleRequest, w formularzu rentordera jedyne co dochodzi dodatkowo to jest ustawiany numer telefonu, email dla FinalCarUser(akurat tam bo jest to powiązane niejako z formularzem, numer telefonu i email jest przypisany bezpośrednio do zamówienia bo nie jest zawsze koniecznie powiązany z użytkownikiem akurat), poza tym nic więcej się
problem jest taki że ten "bug" miałem w przypadku gdy finalCarUser i secondFinalCarUser wskazywał na to samo entity w bazie


No to wiele wyjaśnia.

Obiekty są przekazywane przez referencje. Czyli mając dwie zmienne z tym samym obiektem – jak zmienisz jedną, to zmieni się i druga.

Symfonowe formy operują albo na arrayach albo obiektach. Jeśli ustawisz, żeby form operował na obiektach, to będzie modyfikował obiekt.

Jeśli masz więc dwa pola formularza z
@Jurigag: W linii 75 definiujesz, że wartości są odzwierciedlone bezpośrednio na encji. Czyli nawet jak pobierasz wartość od forma, to dostaniesz wartość z encji – bo encja jest „modelem formularza”.
@MacDada: ale to nie są te same obiekty, to są dwa różne obiekty, a przynajmniej powinny być, jedynie w rentOrder finalCarUser i secondFinalCarUser wskazują na tą samą encje w bazie danych

no ale okej rozumiem, handleRequest operuje na obiektach i to głupie przekazywanie przez referencję xd
ale to nie są te same obiekty, to są dwa różne obiekty


@Jurigag: Jak nie są, jak napisałeś:

problem jest taki że ten "bug" miałem w przypadku gdy finalCarUser i secondFinalCarUser wskazywał na to samo entity w bazie


?

Jeśli wskazują na to samo entity, to Doctrine zwróci ten sam obiekt.
@MacDada: no racja w sumie, ehh xD powinno tworzyć inny obiekt jako sam obiekt no ale cóż :x rozumiem w sumie czemu się tak dzieje, po prostu rozwiązałem to aby nie dało się ustawić tego samego użytkownika dla obu tych wartości i tyle xD
Z ciekawości więc, jakie jest najlepsze rozwiązanie w takiej sytuacji?


@Vinniczek: Zależy co chcesz osiągnąć. Jakoś dziwnie mi wygląda ten formularz:

* Edytujesz zamówienie
* Dla zamówienia możesz wybrać dwóch użytkowników
* W tym samym formularzu masz możliwość edycji tych dwóch użytkowników

I teraz w zależności od tego co zdecyduje biznes:

* a.) Można zrobić jak @Jurigag – zakazać wyboru dwóch takich samym użytkowników
* b.) Można pozwolić na wybór dwóch
@MacDada: akurat niestety taki biznes że musi być od razu edycja zamówienia w jednym miejscu - przez co to samo w sobie tworzy już masę problem :P musiałem to tego wykombinować aby odpowiednio zaciągało z bazy użytkownika o ile istnieje - trochę roboty z tym było :P