Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Symfony] Zmiana modelu w generator.yml (backend)
Ravv
post
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.
Go to the top of the page
+Quote Post
woj_tas
post
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
Go to the top of the page
+Quote Post
Ravv
post
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)
Go to the top of the page
+Quote Post
axi
post
Post #4





Grupa: Zarejestrowani
Postów: 8
Pomógł: 3
Dołączył: 4.10.2007

Ostrzeżenie: (0%)
-----


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.

Ten post edytował axi 20.02.2009, 15:39:50
Go to the top of the page
+Quote Post
Ravv
post
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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 7.09.2025 - 19:29