Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony] Zmiana modelu w generator.yml (backend)
Forum PHP.pl > Forum > PHP > Frameworki
Ravv
Witam.
Jak zmienić model z którego korzystać ma panel admina (backend)?

Przykład mam taki:
Redaktor pisze artykuł - podczas zapisywania w modelu /lib/model/Article.php nadpisuje metodę save() dodając setAuthorID( /* tu id autora /* ), bo wiadomo -> redaktor nie może ręcznie wpisywać swojego id, generowania ukrytego pola w formularzu dodawania z id redaktora też chcę uniknąć.

I tu pojawia się problem, ponieważ chcę by w backendzie admin mógł wybierać id autora podczas pisania nowego artykułu... Tyle że backend korzysta z tego samego modelu, więc korzysta również z nadpisanej metody save()...

Niby w generator.yml jest opcja model_class: Article, ale podczas zmiany na np. BackendArticle i stworzeniu w /lib/model pliku BackendArticle.php gdzie metodę save() przywracam do normalności - wywala mi błąd symfony że nie może znaleźć BackendArticle model class.

Cache oczywiście czyściłem.

Mało tego - plik BackendArticle.php o dziwo jest parsowany, ponieważ jak specjalnie zrobię w nim błąd w pisowni - php zwraca wtedy Fatal Error'a.
Po przestudiowaniu sfPropelGenerator postanowiłem utworzyć w /lib/model/map plik BackendArticleMapBuilder.php -> pomogło, już niby model odnajduje, ale dodatkowo w generatorze muszę poustawiać "stare" nazwy klas formularzy i filtrów. Ok - poustawiałem.

Wchodzę do panelu - działa!
Próbuję napisać nowy artykuł -> i lipa, dalej wykorzystywany jest stary model Article.php sciana.gif

Wiecie jak poprawnie zmienić model w backendzie dla jakiegoś modułu?
W tutku jobeet jest o zmianie formularza, ale z modelem już jakoś to tak nie działa (o czym opisałem) :/
Pozdro.
woj_tas
Dodaj do formularza ukryte pole z informacja skad leci artykul (0- ze strony defaultowo, 1 - z admina).
Symfony nie używam, więc pewnie rozwiązanie nie jest idealne.

Pozdrawiam
Ravv
@woj_tas
Nie, nie o to chodzi. Nic mi to nie da. W symfony frontend i backend to dwie odrębne aplikacje, korzystające z tych samych plików modelu... I tu problem - ponoć można stworzyć odrębne (stąd w generator.yml model_class)... tylko jak? wstydnis.gif
axi
Cytat(Ravv @ 20.02.2009, 00:35:05 ) *
Przykład mam taki:
Redaktor pisze artykuł - podczas zapisywania w modelu /lib/model/Article.php nadpisuje metodę save() dodając setAuthorID( /* tu id autora /* ), bo wiadomo -> redaktor nie może ręcznie wpisywać swojego id, generowania ukrytego pola w formularzu dodawania z id redaktora też chcę uniknąć.

A skąd w modelu Article.php bierzesz informację o autorze? Pobierasz kontekst i sprawdzasz użytkownika?
Nie lepiej w kontrolerze w akcji zapisu (gdzie masz dostęp do danych użytkownika) zrobić na forumularzu przed jego zapisem $form->getObject()->setAuthorId($this->getUser()->getId()) ?
Bez mieszania w klasie modelu, bo przecież to chyba nie dotyczy innego modelu dla frontendu tylko innej jego obsługi.

Cytat(Ravv @ 20.02.2009, 00:35:05 ) *
Niby w generator.yml jest opcja model_class: Article, ale podczas zmiany na np. BackendArticle i stworzeniu w /lib/model pliku BackendArticle.php gdzie metodę save() przywracam do normalności - wywala mi błąd symfony że nie może znaleźć BackendArticle model class.
Mało tego - plik BackendArticle.php o dziwo jest parsowany, ponieważ jak specjalnie zrobię w nim błąd w pisowni - php zwraca wtedy Fatal Error'a.
Po przestudiowaniu sfPropelGenerator postanowiłem utworzyć w /lib/model/map plik BackendArticleMapBuilder.php -> pomogło, już niby model odnajduje, ale dodatkowo w generatorze muszę poustawiać "stare" nazwy klas formularzy i filtrów. Ok - poustawiałem.

Skoro jest to klasa modelu, to generator oczekuje, że jak dla prawdziwego modelu ma wszystkie klasy generowane ze schema.

Cytat(Ravv @ 20.02.2009, 00:35:05 ) *
Wiecie jak poprawnie zmienić model w backendzie dla jakiegoś modułu?
W tutku jobeet jest o zmianie formularza, ale z modelem już jakoś to tak nie działa (o czym opisałem) :/

BTW. W formularzu też można przeładować metodę zapisu (doSave() konkretniej) i wystarczy wtedy sam formularz podmienić, jeśli rozwiązanie z wykorzystaniem kontrolera jest niewystarczające.
Ravv
Masz rację axi, lepiej będzie jak w akcji dodam ID autora (zgadza się, w modelu dostawałem się do getUser przez sfContex), a model pozostawię nieruszony w zakresie przeładowań standardowych metod.

Pozdro.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.