Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony] zmienne z akcji do komponentu
Forum PHP.pl > Forum > PHP > Frameworki
AxZx
witam,

czy można w jakiś sposób przekazać zmienne z akcji do komponentu, który mam wstawiony w layout.php?
w akcji pobieram jakieś dane, które wyświetlane są w widoku, ale niektóre dane potrzebowałbym przenieść do widoku komponentu.
jak to można rozwiązać?

chyba popularne zastosowanie (albo rozwiązanie tego) to menu.
menu jak wiadomo wyświetlane jest praktycznie na każdej podstronie. w zależności od tego którą pozycję w menu wybierzemy wyświetlana jest przypisana podstrona, a jako dodatek rozwijane jest podmenu.
żeby to podmenu mogło być rozwinięte komponent menu musi wiedzieć, które menu zostało wybrane. można pobierać z URL, ale jak w URL jest identyfikator tekstowy a w bazie liczbowy to jest problem.

dlatego w akcji pobierany jest dany obiekt przez ten identyfikator tekstowy, a do komponentu chcę przekazać ID liczbowy.

za pomysły i pomoc z góry dziękuję.
pozdrawiam

EDIT:
oświecenie:P

można to zrobić korzystając z metod sfConfig::set w akcji i sfConfig::get w component.
blinksmiley.gif
Foxx
Hm, szczerze mówiąc nie wiem dlaczego masz problem:

Cytat
Just like the partials, components accept additional parameters in the shape of an associative array. The parameters are available to the partial under their name, and in the component via the $this object. See Listing 7-13 for an example.

Listing 7-13 - Passing Parameters to a Component and Its Template
  1. // Call to the component
  2. <?php include_component('news', 'headlines', array('foo' => 'bar')) ?>
  3.  
  4. // In the component itself
  5. echo $this->foo;
  6. => 'bar'
  7.  
  8. // In the _headlines.php partial
  9. echo $foo;
  10. => 'bar'
AxZx
Cytat(Foxx @ 3.03.2009, 00:58:47 ) *
Hm, szczerze mówiąc nie wiem dlaczego masz problem:


rozumiem, że chcesz się dowiedzieć udzielając się?smile.gif

to jeszcze chwilę posiedzę przy komputerku specjalnie dla Ciebie i napiszę Ci. postaram się trochę jaśniej, bo może ten opis u góry trochę zagmatwany.

  1. <?php
  2. #plik 1 - apps/frontend/module/banner/actions/components.class.php
  3. #plik 2 - apps/frontend/module/kategoria/actions/actions.class.php
  4. #plik 3 - apps/frontend/templates/layout.php
  5. ?>


chyba nie trzeba objaśniać, wiadomo co w każdym pliku się znajduje (komponent, akcje, widok).
w pliku 1 pobierane są z bazy dane na temat bannerów.
w akcji w pliku 2 pobierane są dane odnośnie kategorii.
dane z pliku 2 mają trafić do komponent w pliku 1, który jest wywoływany w pliku 3.
proste?smile.gif ano proste heh.

dobranoc.
Foxx
Rozumiem, z pierwszego posta zrozumiałem, że masz po prostu problem z przekazaniem danych z akcji do komponentu. Dobrej nocy.
Lonas
Ja sobie to rozwiązałem za pomoca partiali i w layout-cie wyglada to tak :

  1. <?php include_partial('global/comments', array('comments' => Comments::Lastcomments(3,NULL,NULL))) ?>
AxZx
Cytat(Lonas @ 3.03.2009, 08:46:48 ) *
Ja sobie to rozwiązałem za pomoca partiali i w layout-cie wyglada to tak :

  1. <?php
  2. Comments::Lastcomments(3,NULL,NULL))) ?>


ale nie widzę, żebyś przekazywał jakoś dane z innej akcji do tego partiala.
arecki
Cytat(AxZx @ 3.03.2009, 01:09:40 ) *
  1. <?php
  2. #plik 1 - apps/frontend/module/banner/actions/components.class.php
  3. #plik 2 - apps/frontend/module/kategoria/actions/actions.class.php
  4. #plik 3 - apps/frontend/templates/layout.php
  5. ?>


w pliku 1 pobierane są z bazy dane na temat bannerów.
w akcji w pliku 2 pobierane są dane odnośnie kategorii.
dane z pliku 2 mają trafić do komponent w pliku 1, który jest wywoływany w pliku 3.


Akcja z pliku 2 ma jakiś szablon prawda ? Zdefiniuj w nim slot i wypełnij do danymi które chcesz mieć gdzie indziej a w szablonie w pliku 3 sprawdzaj czy slot istnieje i jeżeli tak to wyświetl go.
Jako że w kolejności najpierw inicjalizowany jest widok dla akcji a później jest dekorowanie do layoutem to powinno zadziałać Ci to jak chcesz.
LBO
a to nie jest tak, że jak umieścisz zmienną w szablonie akcji, to jest ona dostepna we wrapperze?
AxZx
Cytat(LBO @ 3.03.2009, 14:46:08 ) *
a to nie jest tak, że jak umieścisz zmienną w szablonie akcji, to jest ona dostepna we wrapperze?


a jak się dobrać do wrappera w layout.php ?
LBO
sorry... wrapper=layout

Strzelam z tym powyżej, bo nie znam jeszcze takich kruczków w SF

edit:

Zapomnij co napisałem wyżej, tak było kiedyś za czasów SF 1.0.

Teraz wszędzie polecają to.

edit:

Nie zauważyłem, że @arecki już odpowiedział.
AxZx
Cytat(LBO @ 3.03.2009, 15:21:14 ) *
sorry... wrapper=layout

Strzelam z tym powyżej, bo nie znam jeszcze takich kruczków w SF

edit:

Zapomnij co napisałem wyżej, tak było kiedyś za czasów SF 1.0.

Teraz wszędzie polecają to.

edit:

Nie zauważyłem, że @arecki już odpowiedział.


dzięki. będę wiedział na przyszłość:)

rozwiązanie z sfConfig::get jest o tyle lepsze, że nie mogę od razu w komponencie sprawdzać czy jest ustawiona jakaś wartość, np sfConfig::get('idkategoria').
nie muszę przekazywać z layoutu do komponentu tylko bezpośrednio w nim odczytuje.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.