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





Grupa: Zarejestrowani
Postów: 879
Pomógł: 189
Dołączył: 14.06.2006
Skąd: Bytom

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


Ad 1.
Tak jest i tego nie zmienisz, nie widzę sensu żeby tłumaczyć dlaczego. Możesz wykorzystać jakiegoś bundla, który rozwiązuje ten problem. Możesz stworzyć kontroler który będzie rozpoznawał adres i robił przekierowanie. Osobiście jestem zwolennikiem wpisywania każdej trasy osobno.

Ad. 2
Partiale - w Twigu masz {{ include( ... ) }} a w PHP <?php $view->render(...) ?>
Helpery - w Twigu masz tagi, a w PHP (dostępne jako ArrayAccess obiektu $view) np.: <?php $view['router']->generate(...) ?>
Pluginy - w Twigu {{ render() }}, a w PHP <?php $view['actions']->render() ?>
Oczywiście to wszystko jest w dokumentacji opisane szerzej.

Ad. 3
Nie wiem czy nie za bardzo namieszałeś ale niewiele zrozumiałem. W bundlu trzymasz wszystkie pliki z nim związane. Jeśli jeden z szablonów w nim zawartych potrzebuje plik np. jquery.pluginX.js to wrzucasz go do folderu [pakiet]/Resources/public/js/, a w szablonie: {{ asset('bundles/[pakiet]/js/jquery.pluginX.js') }}. Wykonujesz komendę instalującą wszystkie te pliki i działa.

Ad. 4 Wydaje mi się, że tak, ale nie jestem pewien i nie dam rady teraz tego sprawdzić. Myślę, że możesz sprawdzić sam.
Go to the top of the page
+Quote Post
basso
post
Post #3





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

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


Cytat(destroyerr @ 25.04.2013, 13:33:31 ) *
Ad. 3
Nie wiem czy nie za bardzo namieszałeś ale niewiele zrozumiałem. W bundlu trzymasz wszystkie pliki z nim związane. Jeśli jeden z szablonów w nim zawartych potrzebuje plik np. jquery.pluginX.js to wrzucasz go do folderu [pakiet]/Resources/public/js/, a w szablonie: {{ asset('bundles/[pakiet]/js/jquery.pluginX.js') }}. Wykonujesz komendę instalującą wszystkie te pliki i działa.


Hej, dzięki za odpowiedzi.

Chodzi mi to, że jak coś robię w .css czy .js no to muszę wszystko wrzucać do: [projekt]/web/bundles/[pakiet]/js/ . Potem jak zrobię zmiany, no to pasuje aby też pliki w [pakiet]/Resources/public/js/skrypcik.js były zakutalizowane, to znów trzeba brać i kopiować [projekt]/web/bundles/[pakiet]/js/ do Resources ;/ i taka zabawa w macieju.

Chyba, że logika jest taka, że trzeba wszystko robić non stop w web/bundles/[pakiet]/js (czy css) a na końcu jak już pakiet będzie skończony, no to dorzucamy do niego wszytkie te pliki (kopiujemy do [pakiet]/Resources/public/js/) aby osoba instalująca Bundla miała wszystko w jednej paczce.


Cytat(destroyerr @ 25.04.2013, 13:33:31 ) *
Ad. 2
Partiale - w Twigu masz {{ include( ... ) }} a w PHP <?php $view->render(...) ?>
Helpery - w Twigu masz tagi, a w PHP (dostępne jako ArrayAccess obiektu $view) np.: <?php $view['router']->generate(...) ?>
Pluginy - w Twigu {{ render() }}, a w PHP <?php $view['actions']->render() ?>
Oczywiście to wszystko jest w dokumentacji opisane szerzej.


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.

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?
Po prostu nie chcę aby moja klasa z funkcjami była kontrolerem.
  1. My_Funstion_Class
  2. {
  3. public function trarektoria_lotu()
  4. {
  5. retrun $dane;
  6. }
  7.  
  8. }


Jeszcze raz ślicznie dziękuje za pomoc (IMG:style_emoticons/default/smile.gif)

Ten post edytował basso 25.04.2013, 14:00:09
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: 29.12.2025 - 09:45