![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 24 Pomógł: 0 Dołączył: 8.02.2006 Ostrzeżenie: (0%) ![]() ![]() |
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 (IMG:http://forum.php.pl/style_emoticons/default/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. |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 230 Pomógł: 36 Dołączył: 31.03.2006 Skąd: Zielona Góra Ostrzeżenie: (0%) ![]() ![]() |
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 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 24 Pomógł: 0 Dołączył: 8.02.2006 Ostrzeżenie: (0%) ![]() ![]() |
@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? (IMG:http://forum.php.pl/style_emoticons/default/wstydnis.gif) |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 3 Dołączył: 4.10.2007 Ostrzeżenie: (0%) ![]() ![]() |
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. 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. 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. Ten post edytował axi 20.02.2009, 15:39:50 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 24 Pomógł: 0 Dołączył: 8.02.2006 Ostrzeżenie: (0%) ![]() ![]() |
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. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 7.09.2025 - 19:29 |