Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [SF][SF2] Pluginy/Helpery/Partiale/Routing, W jaki sposób można stworzyć i wykorzystać Pluginy/Helpery/Partiale ?
basso
post
Post #1





Grupa: Zarejestrowani
Postów: 155
Pomógł: 1
Dołączył: 12.12.2010

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


Uwaga do Admina
Gdy zaczynam nowy temat, nie mogę dać samego tagu [SF2] tylko muszę dać [SF][SF2] bo wyskakuje mi jak dam samo [SF2], że tytuł powinien być opatrzony tagami. Bardzo proszę o poprawkę tego, bo [SF][SF2] bardziej mi się kojarzy z Symfony 1 i Symfony2. Będzie to wszystko ładniejsze i bardziej czytelne. Z góry ślicznie dziękuję.


Teraz seria pytań do SF2.


1. W Zendzie miałem typowe wywołanie /:Controler/:Akcja. Routowanie następowało "z buta" dla :controler/:akcja. W Symfony2 z tego co widzę, to każda akcja = nowy wpis w routingu (nowa trasa). Czy można zrobić, tak w routingu, abym podawał tylko nazwę kontrolera, a kolejny argument będzie akcją? Bo ja mam 20 akcji i nie chce mi się zaśmiecać routingu ;/

Zend:
Routing defaultowy wygląda tak => :module/:controller/:action
Cms/Blog/nowy
Cms/Blog/edytu
Cms/Blog/najnowsze
Cms/Blog/komentarz

Co bym nie robił, to każda struktura Cms/Blog/X powoduje, że mam 0 wpisów do ROUTINGU i wszystko śmiga.


W Symfony 2 ja widzę natomiast: KATASTROFĘ (aż mnie ręce bolą):
Cms/Blog/nowy => nowy wpis do routingu
Cms/Blog/edytuj=> nowy wpis do routingu
Cms/Blog/najnowsze => nowy wpis do routingu
Cms/Blog/komentarz=>nowy wpis do routingu
.... /......./.............. => N-TY wpis do routingu

Nie neguje tego, po prostu chciałbym się dowiedzieć jak to działa. Przeczytałem i książkę pana Gajdy i COOCKBOOK i polską stronę Symfonii 2 i nigdzie nie mogę znaleźć tego typu ogólnego routingu. Boje się, a chyba na to wygląda, że każda akcja to nowy wpis do routingu. Bardzo proszę o wytłumaczenie czy tak to wygląda czy nie.

2. Czy istnieje tutaj coś takiego jak dołączanie swoich klas np. pluginów, helperów bądź partiali?
Partiale rozumiem jako cząstkowe pliki .twig więc z tym nie ma problemu, chodź z podpięciem modelu nie poszlaje, po prostu jakąś powtarzająca się struktura html. Chyba, że można zwrotkę jakąś z Entity do widoku twiga zaciągnąć, którą będzie ten partial wykorzystywał ? Hmm nie wiem.
Helpery: Ja w Symfony 2 widzę helpery jedynie jako : Wywoływanie kontrolerów w widoku przez {% render 'IbmCmsBundle:Helpers:menu' %}. Renderowany jest wtedy widok danego kontrolera. Jest to fajne, ale nie do końca... każdy może wpisać przecież taki adres do przeglądarki i zobaczy jakąś część kodu, ale rozumiem, że tak to wygląda.
Pluginy.A co z pluginami? Chodzi mi o jakieś swoje klasy abym mógł dołączać z moimi ulubionymi funkcjami abym sobie je ładował do projektu (czy pakietu) i mógł z niego korzystać. Bo nie uśmiecha mi się wykorzystanie wszystkich funkcji jako wywołanie akcji danego kontrolera (kontroler/akcja) w widoku bądź gdzieś indziej ;/

3. Dołączanie zewnętrznych zasobów, ze struktury danego pakietu (Przy generowaniu bundla w momencie "Do you want to generate the whole directiory strukture[no]? dajemy YES.
Tworzy nam się wtedy w danym Bundlu (pakiecie) struktura public/css , public/image , public/js

Pytanie moje brzmi: Jeśli katalogi struktury:
[pakiet]/Resources/public/css/style.css /
[pakiet]/Resources/public/images/cos.jpg ,
[pakiet]/Resources/public/js/skrypcik.js

nie są dostępne za pomocą HTTP TO: Ja budując stronę muszę budować ją korzystając wyłącznie z plików:

[projekt]/web/bundles/[pakiet]/css/
[projekt]/web/bundles/[pakiet]/images/
[projekt]/web/bundles/[pakiet]/js/

i później sobie je przekopiować do struktury [pakiet]/Resources/public/css/style.css tylko po to , żeby ktoś mógł sobie to zainstalować?

Troszkę to moim zdaniem jest "od tyłu robione". Ale chciałem się upewnić, bo na początku wrzuciłem pliki styli do [pakiet]/Resources/public/css/style.css / patrzę => NIC SIĘ NIE ŁADUJE .
Dopiero po przekopiowaniu bądź instalacji php app/console assets:install web mogłem pracować na plikach z publicznego katalogu [projekt]/web/bundles/[pakiet]/images/.

Podsumowując: Buduje wszystko na plikach z katalogu web
[projekt]/web/bundles/[pakiet]/css/
[projekt]/web/bundles/[pakiet]/images/
[projekt]/web/bundles/[pakiet]/js/

i jak już sobie cały BUNDEL zbuduje, to wrzucam to do Resources, tylko po to, aby ktoś mógł sobie to zainstlować/przekopiować do WEB?
Fajne to jest, że jest wszystko w 1 paczce, po prostu chciałem się dopytać, czy może można jakoś podpiąć się i pracować na plikach z katalogów pakietu tj.
[pakiet]/Resources/public/css/style.css /
[pakiet]/Resources/public/images/cos.jpg ,
[pakiet]/Resources/public/js/skrypcik.js


4. Czy w akcjach kontrolerów mogę korzystać raz z annotation, a raz BEZ (IMG:style_emoticons/default/smile.gif) czyli po przez render w akcji ?

5. Czy ktoś korzystał z generowania Entity na podstawie YML? Ja korzystam z Entity w php. Pytanie brzmi: czy przy korzystaniu z .yml też generują się metody w ENTITY?


Na razie tyle pytań co mam, jeśli ktoś coś wie to byłbym wdzięczny za odpowiedzi. Z góry serdecznie dziękuję.

Ten post edytował basso 24.04.2013, 23:40:09
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
basso
post
Post #2





Grupa: Zarejestrowani
Postów: 155
Pomógł: 1
Dołączył: 12.12.2010

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


Na początku dzięki za odpowiedź/pomoc.

Cytat(Crozin @ 25.04.2013, 17:20:14 ) *
Ad. 2. Jeżeli korzystasz z Twiga masz dostęp do wbudowanych w niego samego mechanizmów pozwalających na odseparowanie części kodu w postaci dołączeń (include), makr oraz bloków - więcej w dokumentacji. Dodatkowo Symfony rozszerza Twiga o składnię "render", która pozwala Ci na uruchomienie dowolnej innej akcji. Jeżeli zaś chodzi o pluginy, to możesz musisz tu być bardziej precyzyjny. Chodzi Ci o własne funkcje/obiekty w szablonach?


O include i render to wiem i zaczęłąłem używać render nawet , do zaciągania menu w layout, jest ono wszędzie takie same, więc utworzyłem kontroler/akcję i zaciągam wynik tego przez { % render

Może wytłumaczę jak tego używam Plugin w Zend.
1. Tworzę w Library sobie klasę np. CMS_MY_METOD_PLUGIN. Mam w niej różnego rodzaju funkcje... np. setSzyfrowanie, getDeszyfrowanie.
2. Teraz, czy to w kontrolerze czy w modelu (jeśli potrzebuje, ale rzadko) czy w widoku (najczęściej w widoku) używam, mojej metody CMS_MY_METOD_PLUGIN::getDeszyfrowanie($v['imie'])

Jak widzimy bezproblemowo mogę używać wszędzie mojego zbioru metod. O coś takiego mi chodzi, żebym mógł to czy w widoku wywołać czy w kontrolerze.

Cytat(Crozin @ 25.04.2013, 17:20:14 ) *
Ad. 3. Zasoby (pliku CSS/JS/obrazy itp.) powinieneś przechowywać w {BUNDLE}/Resources/public/... Następnie, korzystając z konsoli uruchom polecenie assets:install --symlink*. Utworzy ono linki symboliczne (zamiast tzw. twardych kopii) do w/w katalogu. Od tego momentu zawartość katalogu .../web/bundles w ogóle Cię nie interesuje, operujesz wyłącznie na {BUNDLE}/Resources/public/... Co więcej nie powinieneś raczej korzystać z {{ asset('...') }} przy dołączaniu skryptów JS czy arkuszy stylów, tylko z Asseticsa.


Jak sytuacja zatem będzie wyglądała na serwerze? Bez problemu będę mógł przegrać cały projekt i będzie działać. Kojarzysz może?

Rozumiem też, że konstrukcja: app/console assets:install web tylko przekopiowuje mi pliki do web i potem korzysta z tych z web... więc w tym przypadku muszę programować w plikach z web/css a potem przekopiować na końcu do {BUNLDE}/Resource/public ?

Ten post edytował basso 25.04.2013, 18:30:05
Go to the top of the page
+Quote Post

Posty w temacie


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: 17.10.2025 - 14:26