Formularze w #symfony2

Mam takie encje jak Question i Answer. Mogą one dotyczyć różnych innych encji. Umożliwiają one po prostu dodanie kolejnych pól do formularza, zdefiniowanych przez użytkownika.

Wymyśliłem że żeby dodać te pola najlepiej będzie zrobić kolekcję z odpowiedziami.
Mam encję Order. W OrderType dodaję kolekcję answers, a do $data dodaję nowe obiekty powiązanych Answer
  • 7
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Jaslanin: to trochę bardziej skomplikowane. tak jak na obrazku. to rozwiązanie o którym piszesz, to pierwszy przypadek który już mi działa. a drugi nie zadziała bo to jest kolekcja, więc nie mogę wywołać addAnswer...

ale chyba zamiast kombinować robiąc kolekcję dla odpowiedzi, muszę zrobić dla zamówienia/produktu w zamówieniu jakiś model w którym dynamicznie dodam atrybuty do obiektu po to by się zbudował formularz, a później z wartości przy zapisie ręcznie
Harry19911 - @Jaslanin: to trochę bardziej skomplikowane. tak jak na obrazku. to rozw...

źródło: comment_hSlVrhNEkhJ9s41StPnl28ALJ0h9G57t.jpg

Pobierz
  • Odpowiedz
#symfony2
Mam encje A, B, C oraz Trio. W encji Trio przechowuję relację ManyToOne do A, B i C. Chciałem zrobić custom field w którym wybieram A, B i C a otrzymuję Trio (lub błąd że takie Trio nie istnieje).

TrioType.php

public function buildForm(FormBuilderInterface $builder, array $options)
  • 3
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Ostatnio dostałem projekt w #symfony2, w którym encje wyglądają tak: HomePage, AboutUsPage, ContactUsPage, PricingPage itp.
Co za tym idzie w bazie danych jest kilka wielokolumnowych tabel zawierających po jednym rekordzie.
Czy to normalny i szanowany sposób tworzenia aplikacji w #symfony? #php
  • 21
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@DiKey: Dobra, więc jeśli faktycznie pytasz jak „zrobić to dobrze”, to tak jak pisałem wcześniej, Symfony nie ma (aż takiego) znaczenia: Twoim zadaniem z dziedziny architektury oprogramowania jest:

* zidentyfikować potrzeby klienta
* opisać te potrzeby za pomocą kodu (model, use case'y)
* dorobić szczegóły techniczne jak persystencja czy UI (widoki, routing, etc – to „tylko” warstwa
  • Odpowiedz
Szczególnie wydając bundle nie warto robić takiej pokręconej logiki jak tworzenie własnych komend wywołujących wbudowane ;)


@kiler129: I vice-versa, wywołując cache:clear spodziewasz się, że usuniesz tylko cache z symfony2. W dodatkowych bundle'ach jest po prostu oddzielna komenda do czyszczenia cache'u tworzonego tylko przez tego bundle'a.
  • Odpowiedz
@kiler129: No to IMHO:

1. Na pewno zrób do tego dedykowane polecenie.
2. Dodatkowo możesz się podpiąć pod Symfonowe.

Ad2: tak jak już znalazłeś, podpiąć się
  • Odpowiedz
UK, 2015, programista (nie ja) i takie kwiatki robi xD Ściągnął wszystkie kategorie z bazy danych i leci przez nie pętlą. W środku każdej kategori uruchamia kolejną pętle przez wszystkie, tym razem szukając podrzędnych kategorii. Relacji żadnych, wcięć w źródle żadnych. A na domiar złego zostawił część tagów poza if-em i rezultat na obrazku. #php #symfony #webdev
suhy - UK, 2015, programista (nie ja) i takie kwiatki robi xD Ściągnął wszystkie kate...

źródło: comment_6rWC06k1fXciL2r8nQKKTIAoVDbwJGOZ.jpg

Pobierz
  • 9
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Domons: @Jurigag: ok rozumiem. Przy tworzeniu nowego obiektu encji to było nullem. A przy edycji Doctrine zawsze tworzy tutaj kolekcję. Więc zamiast robić NotBlank to powinienem w konstruktorze dać

$this->researchDirections = new \Doctrine\Common\Collections\ArrayCollection();
  • Odpowiedz
#symfony #symfony2 #php #doctrine #mysql
Mam dwie encję: Post i Category. Post zawiera pole $category, a Category pole $posts - czyli typowa relacja one to many.
Chciałbym teraz pobrać post z powiązanym obiektem kategorii w jednym zapytaniu. W tym celu używam takiej funkcji umiejscowionej w PostRepository. Niestety ten DQL w połączeniu z kluczami obcymi generuje nieskończenie zagnieżdżone zapytanie ( ͡° ʖ
  • 26
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Potrzebuję logować wszystko co się dzieje w bazie w Doctrine.

Loggable mi nie pasuje bo nie loguje zmian w relacjach (ManyToOne itd.) oraz tego co wykonam w lifecycle callbacks (za każdym updatem robię hasha na podstawie aktualnej daty itd.)

EntityAutid za każdą zmianą wiersza, tworzy kopię jego całej zawartości, więc tworzy za dużo danych. Loggable potrafił zapisać JSON'em tylko zmieniające się dane.

Jest
  • 3
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

EntityAutid za każdą zmianą wiersza, tworzy kopię jego całej zawartości, więc tworzy za dużo danych


@Harry19911: Co to znaczny „za dużo”? Tzn na czym polega problem? Zabraknie miejsca na serwerze? Będzie się długo dodawać? Długo wyszukiwać?
  • Odpowiedz
#php #symfony #symfony2

Wytłumaczy mi ktoś w jaki sposób zrobić w formularzu tak, żeby dwa pola odpowiadały jednej property z entity?

Wiem, że chyba trzeba stworzyć swój typ dla Form Field i pewnie Data Transformer ale za cholerę nie mogę tego zebrać do kupy :/
  • 24
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@gajowy_marucha: https://gist.github.com/MacDada/5592c8c25b1a694b071f

Oczywiście, w zależności co faktycznie chcesz mieć „po swojemu”, to nadpisujesz.
W result.html jest więcej DIVów niż u Ciebie, ale nie powinno to przeszkadzać. A jak przeszkadza to możesz jeszcze bardziej nadpisać domyślne wyświetlanie.

Zauważ, że nadpisując widget, wykorzystuję symfonowe bloki – jak chcesz możesz olać i całkowicie mieć
  • Odpowiedz
Korzystał ktoś z was z wtyczki SoftDeleteable do Doctrine i jednocześnie zapisywał dane np. o tym kto daną rzecz usunął?
Gdy wykorzystuję eventy preSoftDelete i postSoftDelete to w nich nie działa flush(), tzn. nie zapisuje moich zmian (informacji kto usuwa) do bazy.
#symfony #symfony2 #webdev #php
  • 6
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@micze: Raczej bardziej kluczowe jest tu, że jest to język interpretowany a nie kompilowany a nie jego typowanie. Nie określił bym tego, jako ssanie interfejsów PHP, bo one spełniają swoją funkcję na tyle na ile pozwala im charakter języka.
  • Odpowiedz
Napisałeś to co wydawało mi się, że napisałem a na pewno miałem na myśli. Konkluzja tylko inna


@micze: Bardzo możliwe :)

Chodzi raczej o użyteczność danego narzędzia […] mają marginalne
  • Odpowiedz
Mirki, mam pytanie.
Czy istnieje sposób aby zrobić update bazy danych poprzez komendę doctrine:schema:update(lub inną podobną) ale tylko encji z jednego bundle? Problem się z tym robi gdy kilka osób na raz pracuje w projekcie.
Wiem że można to zrobić poprzez wyłączenie paczek w AppKernel lub --dump-sql i wybranie, skopiowanie i wykonanie zapytań dotyczących tylko mojej paczki ale to mnie nie ustawia przy dużej ilości zmian. Jest to trochę irytujące ( ͡
  • 5
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@qwelukasz: OK. Ale masz źle znormalizowany schemat. Dochodzi do redundancji danych.
Dodając do tego linie autobusowe wygląda to mniej więcej tak: Arrivals(BusStopId, LineId, Time)
I teraz mając BusStopId możesz sprawdzić jakie linie tam idą i o której godzinie ( informacje z tabliczki ) a czas jest w jednym miejscu.
  • Odpowiedz
#symfony #symfony2 #php
taka sprawa, powiedzmy że mam dwie encje:
Przystanek oraz Linia (autobusowa/tramwajowa, etc..)

Jaka relacja powinna być pomiędzy Przystanek a Linia oraz Linia a Przystanek?

Mam
  • 10
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@qwelukasz: Raczej musisz mieć jeszcze pośrednie entity, które pozwoli Ci na definiowanie choćby kolejności przystanku w linii. Nie mówiąc o innych pierdołach, np. czy przystanek występuje w jedną stronę, czy w dwie. Może też tak być, iż powrót będzie realizowany trochę inną drogą, a obecna relacja nie pozwoli Ci na duplikaty.
  • Odpowiedz
to ManyToMany ;), ale wtedy weź pod uwagę, że informacje zapisane w BusStop, takie jak: direction czy też number będą współdzielone dla wszystkich linii. Dlatego proponowałem Ci encję, która będzie pośredniczyła pomiędzy linią a przystankiem.
  • Odpowiedz
  • 1
@frax: standardy to standardy. Serwery pocztowe tez są implementowane na podstawie RFC, jeżeli są one w stanie przyjąć adres "( ͡° ͜ʖ ͡°)"@example.com, to nie widzę problemu by taki adres przyjąć w formularzu.
  • Odpowiedz
@surma: Właśnie chyba niekoniecznie są, bo ten standard jest absurdalnie przerośnięty. Tutaj znajdziesz regex walidujący zgodnie z RFC, i trochę tekstu na temat "czemu zgodność z RFC jest bez sensu".

Ad.2.: Jeżeli przyjmie samą kropkę, to rzeczywiście do kitu jest :P
  • Odpowiedz