2008.08_Przyszłość Symfony wersja 1.1 – prawdziwa rewolucj_[Narzedzia Programistyczne].pdf
(
364 KB
)
Pobierz
441706420 UNPDF
Narzędzia programistyczne
Przyszłość Symfony
wersja 1.1 – prawdziwa rewolucja
W chwili kiedy piszę te słowa dostępna jest już wersja beta Symfony 1.1.
Wydanie to jest swoistą rewolucją, więc warto przedstawić nowości, które
się w nim pojawią.
Dowiesz się:
• Co nowego znajdzie się w wersji 1.1 framewor-
ka Symfony.
Powinieneś wiedzieć:
• Co to jest Symfony;
• Jak działały walidatory, helpery oraz formula-
rze w Symfony 1.0
Widżety
Widżet jest obiektem, który może być rendero-
wany jako kod HTML. Widżetów używamy w
zastępstwie helperów. Stwórzmy teraz przykła-
dowy widżet.
Poziom trudności
Ograniczenie
zależności i EventDispatcher
Symfony 1.1 zawiera mocno zmodyfikowa-
ną strukturę klas podstawowych w porów-
naniu do wersji 1.0. Zmiany polegają przede
wszystkim na usunięciu zależności oraz sin-
gletonów.
Struktura zależności wersji 1.0 i 1.1 zo-
stała przedstawiona na Rysunku 1 i 2 odpo-
wiednio.
$w = new sfWidgetFormInput();
//tworzy nowy widżet typu input
echo $w->render(’irst_name’, ‘Marcin’);
//wyświetla widżet
N
owy framework zadań będzie zorgani-
Zastosowanie takiej konstrukcji pozwoli nam
uzyskać następujący znacznik HTML:
zowany wokół przestrzeni nazw. Będzie
także dużo łatwiejszy w rozbudowie.
Porównanie przestrzeni nazw wybranych za-
dań znajduje się w Tabeli 1. Wbudowany zosta-
nie także system pomocy.
Wyświetlmy dla przykładu pomoc do zada-
nia
plugin-install
:
<input type=”text” name=”irst_name”
value=”Marcin” id=”irst_name” />
Nowe formularze,
widżety i walidacja
W kwestii powyższych zagadnień możemy mó-
wić o zupełnie nowym podejściu. Podejście to
opiera się na trzech filarach:
Symfony 1.1 daje nam także do dyspozycji kla-
sę
sfWidgetFormSchema
. Klasa ta reprezentu-
je grupę widżetów. Stwórzmy zatem dwa po-
la tekstowe odpowiadające imieniu oraz na-
zwisku:
symfony help plugin:install.
Istotną nowością jest także możliwość wywo-
łania zadania bezpośrednio z kodu aplikacji:
•
widżety –
sfWidget
•
walidatory –
sfValidator
oraz
sfValidatorSchema
•
formularze –
sfForm
$w1 = new sfWidgetFormInput();
$w = new sfWidgetFormSchema(array(‘irst
_name’ => $w1,‘last_name’ => $w1,));
$task = new sfCacheClearTask($dispatcher);
$task->run();
Zestaw taki wyświetlimy za pomocą polecenia:
Możemy tego dokonać dzięki oddzieleniu za-
dań od CLI (ang.
command
line
interface
).
Każdy z nich stanowi oddzielny podsystem,
w pełni niezależny od pozostałych. Przyjrzyj-
my się im bliżej.
$w->render(null, array('irst_name'
=> 'Marcin', 'last_name' =>
'Świerczyński', ));
Tabela 1.
Porównanie nazw wybranych zadań
Symfony 1.1
Symfony 1.0
generate:app
init-app
generate:batch
init-batch
generate:controller
init-controller
generate:module
init-module
generate:project
init-project
test:all
test-all
test:functional
test-functional
test:unit
test-unit
74
08/2008
Przyszłość Symfony – wersja 1.1
Obiekty klasy
sfWidgetFormSchema
są obiek-
tami klasy
sfWidget
, więc pozycją zestawu
może być inny zestaw, co jest przedstawione
na Listingu 1.
Walidatory
Walidatory służą do sprawdzania poprawności
oraz „oczyszczania” wprowadzanych danych.
Zobaczmy jak działają w praktyce (Listing 4).
Podobnie, jak w przypadku widżetów, wa-
lida tory możemy grupować (Listing 5). Jak
widzimy, funkcji
clean()
musimy podać ta-
blicę wartości, odpowiadających konkretnym
polom.
Zestawy walidatorów również możemy za-
gnieżdżać, co przedstawia Listing 2.
Listing 1.
Zagnieżdżanie widżetów
$authorWidget
=
new
sfWidgetFormSchema
(
array
(
'irst_name'
=
>
$w1
,
'last_name'
=
>
$w1
,
))
;
$bookWidget
=
new
sfWidgetFormSchema
(
array
(
'title'
=
>
$w1
,
'sub_title'
=
>
$w1
,
'author'
=
>
$authorWidget
,
))
;
$bookWidget
-
>
render
(
null,
array
(
'title'
=
>
'The symfony book'
,
'sub_title'
=
>
'The deinitive guide'
,
'author'
=
>
array
(
'irst_name'
=
>
'Fabien'
,
'last_name'
=
>
'Potencier'
,
)
,
))
;
Formularze
Formularze stanowią rodzaj spoiwa między wi-
dżetami, a walidatorami. Sercem formularzy
jest klasa
sfForm
.
Klasa ta zapewnia nam dostęp do metod
umożliwiających budowanie HTML-owych
formularzy, obsługę walidacji ich pól, a także
zapis i pobieranie danych – słowem całej funk-
cjonalności niezbędnej do budowania tych
podstawowych elementów interakcji z użyt-
kownikiem.
Stwórzmy zatem pierwszy formularz. Kod
znajduje się na Listingu 3.
To właściwie wystarczy, aby wyświetlić for-
mularz:
echo $form
. Możemy także wyświetlić
jedynie imię autora.
W tym celu użyjemy konstrukcji
echo
$form['first_name'];
, która zwróci nastę-
pujący kod:
Listing 2.
Zagnieżdżanie walidatorów
$authorValidator
=
new
sfValidatorSchema
(
array
(
'irst_name'
=
>
$v1
,
'last_name'
=
>
$v1
,
))
;
$bookValidator
=
new
sfValidatorSchema
(
array
(
'title'
=
>
$v1
,
'sub_title'
=
>
$v1
,
'author'
=
>
$authorValidator
,
))
;
$bookValidator
-
>
clean
(
array
(
'title'
=
>
'The symfony book'
,
'sub_title'
=
>
'The deinitive guide'
,
'author'
=
>
array
(
'irst_name'
=
>
'Fabien'
,
'last_name'
=
>
'Potencier'
,
)
,
))
;
<input type="text" name="irst_name"
value="Marcin" id="irst_name" />
������������������������
Na szczególną uwagę zasługuje klasa
sfFormPropel
, która odpowiada za genero-
wanie formularzy na podstawie obiektów
Propela.
Dzięki niej może mapować typy danych z
Propela na widżety i walidatory. Funkcjonal-
ność ta dotyczy w szczególności kluczy obcych
i relacji wiele-do-wielu.
���������
������
Coś jeszcze?
Formularze, widżety, walidatory oraz modyfi-
kacja architektury to chyba najważniejsze zmia-
ny, jakie wprowadzono w wersji 1.1. Najnowsza
edycja wniesie jednak masę drobniejszych po-
prawek i funkcjonalności.
Na pewno na uwagę zasługuje manager plug-
inów, który został napisany zupełnie od nowa.
Zapewniać on będzie obsługę zależności mię-
dzy wtyczkami.
Poprawiono także integrację z Propelem. Zo-
stał on włączony jako plug-in do standardowe-
go wydania frameworka. Od teraz deklarowa-
nie zachowań będzie możliwe wprost ze sche-
matu, który to z kolei będzie mógł być nadpi-
sany przez inny.
Ponadto umożliwiono definiowanie danych
testowych dla relacji wiele-do-wielu (w plikach
fixtures
).
Zmiany nie ominęły także mechanizmu ro-
utowania. Wprowadzono warstwę cache’ującą,
co zapewni znaczny wzrost wydajności w przy-
padku serwisów z dużą ilością URLi do wyge-
nerowania.
����������
������
���������
��������
���������
������
���������
����������
Rysunek 1.
Struktura zależności w Symfony 1.0. Źródło: Prezentacja z IPC 2007, Frankfurt
www.sdjournal.org
75
Narzędzia programistyczne
Listing 3.
Przykładowy formularz
class
AuthorForm
extends
sfForm
{
public function conigure(
)
{
$this
-
>
setValidatorSchema
(
$authorValidator
)
;
$this
-
>
setWidgetSchema
(
$authorWidget
)
;
}
}
$form
=
new
AuthorForm
()
;
$input
=
array
(
'irst_name'
=
>
'Marcin'
,
'last_name'
=
>
'Swierczynski'
)
;
$form
-
>
bind
(
$input
)
;
if
(
$form
-
>
isValid
())
{
$form
-
>
getValues
()
;
// wartości przygotowane do obróbki
}
else
{
$form
-
>
getErrorSchema
()
;
// obsługa
błędów
}
W temacie cache’owania również może-
my spodziewać się nowości. Umożliwio-
no wykorzystanie innych miejsc składowa-
nia cahce’a (np. Memcached), a także usu-
nięcie cache’a z poziomu innej aplikacji, niż
bieżąca.
Generalnie mechanizm cache’owania bę-
dzie można teraz zastosować nie tylko do
warstwy widoku, ale też np. do warstwy mo-
delu.
Zmiany w cache’owaniu wpłyną także na in-
ternacjonalizację aplikacji. Będzie ona teraz wy-
korzystywała te same techniki, co warstwa wi-
doku, co zapewni dużo szybsze generowanie
szablonów.
Ponadto nowe zadania umożliwią wyszu-
kanie ciągów znaków niedostosowanych do
internacjonalizacji, a także znalezienie nie-
przetłumaczonych tekstów. Będą to symfo-
ny i18n:find i symfony i18n:extract odpo-
wiednio.
Usprawniono także etap konfiguracji aplika-
cji. Zintegrowano lepszy parser YAML, a także
zaimplementowano nowe, pomocne komuni-
katy o błędach w plikach YAML.
Listing 4.
Przykładowy walidator
$v
=
new
sfValidatorString
(
array
(
'min_length'
=
>
4
))
;
//ciąg znaków o długości co
najmniej 4
$value
=
$v
-
>
clean
(
'Marcin'
)
;
//$value == ‘Marcin’
$v
-
>
setOption
(
'trim'
, true
)
;
$value
=
$v
-
>
clean
(
' Marcin '
)
;
//$value == ‘Marcin’
Mała rewolucja
Te wszystkie zmiany sprawiają, że nowe wy-
danie Symfony będzie pewną rewolucją. Kod
frameworka został bardzo dopracowany. Po-
dwojono także liczbę testów jednostkowych (z
4 do 8 tysięcy), co oznacza, że możemy two-
rzyć aplikacje w oparciu o nową wersję, ma-
jąc właściwie pewność, że będą wydajne i bez-
pieczne.
Warto jeszcze zaznaczyć, że istniejące aplika-
cje, korzystające z rozwiązań wersji 1.0 można
uruchamiać w trybie zgodności.
W tym celu musimy włączyć opcję
com-
pat_10
w pliku
apps/nazwaAplikacji/config/
settings.yml
:
Listing 5.
Grupowanie walidatorów
$v1
=
new
sfValidatorString
(
array
(
'min_length'
=
>
4
))
;
$v
=
new
sfValidatorSchema
(
array
(
'irst_name'
=
>
$v1
,
'last_name'
=
>
$v1
,
))
;
$v
-
>
clean
(
array
(
'irst_name'
=
>
'Marcin'
,
'last_name'
=
>
'Swierczynski'
,
))
;
������������������������
���������
������
all:
.settings:
compat_10: on
����������
������
Zapewne wielu programistów zdecyduje się
na takie rozwiązanie w istniejących projek-
tach, jednak nowopowstające aplikacje warto
tworzyć w oparciu o mechanizmy zawarte w
Symfony 1.1.
�����������������
���������
������
���������
���������
��������
MARCIN ŚWIERCZYŃSKI
Autor jest współzałożycielem irmy TeamLab.pl,
specjalizującej się w wytwarzaniu oprogramowa-
nia klasy enterprise. Studiuje w Polsko-Japońskiej
Wyższej Szkole Technik Komputerowych w Warsza-
wie. Interesuje się programowaniem (Java, PHP),
bazami danych oraz projektowaniem stron inter-
netowych.
Kontakt z autorem: marcin@swierczynski.net
����������
Rysunek 2.
Struktura zależności w Symfony 1.1. Źródło: Prezentacja z IPC 2007, Frankfurt
76
08/2008
Plik z chomika:
Kapy97
Inne pliki z tego folderu:
2008.07_Generowanie kodu w Symfony_[Narzedzia Programistyczne].pdf
(581 KB)
2006.08_OpenMap proste narzędzia do rozwiązywania trudnych problemów_[Narzedzia Programistyczne].pdf
(705 KB)
2006.11_JasperReports oraz iReport – raportowanie z baz danych_[Narzedzia Programistyczne].pdf
(535 KB)
2006.10_QuickServer – szybkie tworzenie szybkich serwerów_[Narzedzia Programistyczne].pdf
(575 KB)
2010.05_Buildout _[Narzedzia Programistyczne].pdf
(420 KB)
Inne foldery tego chomika:
Algorytmy
Antyhaking
Aplikacje Biznesowe
Aspekty
Bazy Danych
Zgłoś jeśli
naruszono regulamin