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
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Ad. 1. O ile dobrze pamiętam takie coś nie jest możliwe do uzyskania OOTB. Jednakże, Sf2 umożliwia Ci podmianę niemal dowolnego elementu samego frameworka, stąd mógłbyś utworzyć sobie obiekt, który na podstawie Twoich parametrów _bundle, _controller, _action utworzyłby parametr _controller w formie "{_budnle}Bundle:{_controller}:{_action}Action".

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?

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.

Ad. 4. Nie widzę przeszkód ku temu, jednak dobrą praktyką jest ujednolicona konfiguracja. Jeżeli jednak tworzysz jakiegoś bundla, który może być wykorzystywany w innych projektach niemal zawsze powinieneś korzystać z konfiguracji w XML/YAML.

Ad. 5. Chodzi Ci o gettery/settery? Nie pamiętam, ale niemal na pewno tak.

Cytat
Rozumiem, ale wszystko mam brać z Controler/Akcja? Chodzi mi bardziej gdzie mogę umieścić i jak korzystać z swojej prywatnej klasy która nie będzie Kontrolerem. Bo jak jest kontrolerem to może się do niej dostać każdy przez url.
Między innymi z tego powodu Sf2 nie ma wbudowanego routingu na zasadzie /{_controller}/{_action} i wymusza na Tobie ręczną konfigurację każdego adresu. Tak na prawdę nie zdecydowana większość serwisów nie ma aż tak dużej liczby akcji by stanowiło to jakiś poważny problem/utrudnienie.

Cytat
Załóżmy stworzyłem sobie taką klasę jak jest poniżej. I mam w niej funkcje. Pytanie gdzie mogę sobie umieścić tą klasę i jak ją załadować i jak z niej korzystać w Kontrolerze czy Entity (modelu) a nawet w TWIG?
1. Samą klasę wrzucasz sobie w odpowiednią przestrzeń nazw w swoim bundlu, np. Me\TestBundle\FlightSimulator\AbcClass. Zresztą jej lokalizacja czy nazwa nie ma absolutnie żadnego znaczenia tak długo jak class loader jest wstanie ją odnaleźć.
2. Jeżeli chcesz wykorzystać w niej jakieś zależności powinieneś z niej utworzyć usługę w kontekście DICa: http://symfony.com/doc/master/book/service_container.html Wtedy też w kontrolerze będziesz mógł odwołać się do tej usługi poprzez proste $this->get('my_service_name').
3. Encje to jedynie obiekty-domeny (domain objects), które powinny przede wszystkim ograniczyć się do reprezentowania danych. Nie są one synonimem Modelu w kontekście MVC, są jedynie jego częścią - najbardziej prymitywną/podstawową. Nie powinny one raczej korzystać z innych usług - to inne obiekty (usługi) powinny pracować na nich.
4. Odnośnie używania własnych obiektów w Twigu: http://symfony.com/doc/master/cookbook/tem..._extension.html


* Pod Windowsem będziesz musiał uruchomić wiersz poleceń jako administrator, bądź nadać swojemu użytkownikowi systemowemu prawa do tworzenia linków symbolicznych: http://superuser.com/questions/104845/perm...ks-in-windows-7
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: 14.10.2025 - 21:13