Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: przekazywanie obiektów php do smarty
Forum PHP.pl > Forum > PHP
zzeus
Czy są jakieś zagrożenia lub przeciwskazania związane z przekazywanie obiektów php do szablonów smarty ?
Mamy kod

  1. <?php
  2. $user = new User();
  3. $smarty->assign_by_ref('user', $user);
  4. ?>


a później już w szablonie

  1. Imię użytkownika: {$user->getName()}
pinochet
z dokumentacji smarty:
Cytat
Properties of objects assigned from PHP can be referenced by specifying the property name after the -> symbol.

O metodach nic nie ma, raczej przykład który podałeś jest nieprawidłowy.
Co do przeciwskazań ... niewiadomo kiedy metoda zostanie wywołana questionmark.gif
zzeus
Wydaje mi się że zostanie wywołana podczas renderowania widoku, czyli w chwili wywołania $smarty->display(), które zawsze umieszczam na końcu kodu więc z tym nie powinno być problemu.
wrzasq
czy jest jakas konkretna przyczyna dlaczego chcesz tak zrobic w ogole? w szablonach dane powinny byc raczej atomowe (wzglednie tablicowe dla list), wiec w twoim przypadku raczej powinienes to zrobic przez po prostu $smarty->assign('name', $user->getName() ); assign_by_ref() powinienes raczej uzywac, jezeli po prostu chcesz w pozniejszym czasie na zewnatrz zmienic wartosc juz rpzypisanej zmiennej:

  1. <?php
  2. $name = $user->getName();
  3. $smarty->assign_by_ref('name', $name);
  4. $name .= ' trlaalalal';
  5. ?>
zzeus
żeby sobie uprościć życie, zamiast przekazywać każdy parametr osobno przekazuje raz obiekt i wewnątrz wywołuje sobie metody
phpion
@pinochet & @wrzasq:
Ale gadacie brednie worriedsmiley.gif

@wrzasq:
A co jeśli miałbyś do wyświetlenia np. 10 użytkowników? Tak samo będziesz szalał?...

@zzeus:
Nie masz się czym przejmować, przekazywanie całych obiektów do Smarty nie jest niczym złym. Rób jak robisz i nie słuchaj tych głupot.
l0ud
Cytat
Nie masz się czym przejmować, przekazywanie całych obiektów do Smarty nie jest niczym złym.

Ale w tym przypadku kłóci się z ideą oddzielenia szablonów od kodu... Do szablonu powinniśmy podstawić tylko i wyłącznie dane do wyświetlania.

Kod
Imię użytkownika: {$user->delete(45)}
phpion
Cytat(l0ud @ 22.12.2008, 20:43:26 ) *
Ale w tym przypadku kłóci się z ideą oddzielenia szablonów od kodu... Do szablonu powinniśmy podstawić tylko i wyłącznie dane do wyświetlania.
Kod
Imię użytkownika: {$user->delete(45)}

Jeżeli nie widzisz różnicy między metodą getName() a delete() no to nie mamy o czym rozmawiać.
wrzasq
Cytat
A co jeśli miałbyś do wyświetlenia np. 10 użytkowników? Tak samo będziesz szalał?...

a czy to nie jest wspomniana przeze mnie lista? -.-'
phpion
@wrzasq:
I wtedy $user->getName() będzie ok?
l0ud
Oczywiście że różnicę widzę winksmiley.jpg Chodzi mi o ideę oddzielenia części szablonów od rzeczy w nich niepotrzebnych (jak na przykładzie wyżej). Ja tam wolę ręcznie przekazywać i obsadzać dane w szablonie - wtedy wyraźnie widzę z jakich zmiennych korzysta szablon i jak je przekazuję. Nie widzę problemu, z dopisaniem gdzieniegdzie kilku linii kodu smile.gif Wyjątek stanowią u mnie zmienne językowe i konfiguracyjne, które są w szablonie zawsze.
pinochet
Cytat(phpion @ 22.12.2008, 18:28:15 ) *
@pinochet & @wrzasq:
Ale gadacie brednie worriedsmiley.gif

Nie ma to jak konstruktyna krytyka :]
Cytat(phpion)
Nie masz się czym przejmować, przekazywanie całych obiektów do Smarty nie jest niczym złym. Rób jak robisz i nie słuchaj tych głupot.
...
Jeżeli nie widzisz różnicy między metodą getName() a delete() no to nie mamy o czym rozmawiać.

1. Nie mówimy że przekazywanie obiektów jest złe tylko wywoływanie metod.
2. Nie widzę róźnicy - to nie jest C#
Oczywiście jeżeli sam sobie skrobiesz cos to nie ma znaczenia czy będziesz wywoływał metody w templates i czy wogole zastosujesz templates ale jeśli szablon przygotowuje mi grafik to nie mam czasu na tłumaczenie że "->" robisz jak jest obiekt. Obiekt to np $user ale przy $tytul nie robisz bo to nie jest obiekt .... grafik ma listę 10 - 20 - 50 zmiennych i sie nie zastanawia czy wywołuje metode czy uzywa zmiennej statycznej ... przynajmniej w projektach które tworzę tak to wygląda.
wrzasq
@phpion: wtedy deleguje pobieranie danych z juzera do jakiegos iteratora i przydzielam iterator jako liste. co prawda ja nie uzywam smarty i nawet go nie lubie, ale taka jest ogolem idea szablonow (jesli sie nie myle ;P). oczywiscie, ze mozna przekazywac obiekty do szablonow, ale ma to sluzyc co najwyzej agregowaniu danych, a nie przenoszeniu ciezaru ich pobierania na szablon.
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.