Zend Framework Tutorial
Zend_InputFilter
Ostatnim komponentem opisywanym w tutorialu jest Zend_InputFilter. Ta klasa zapewnia proste metody filtrujące dane. Tworzysz jej instancję przekazując w parametrze tablicę danych do przefiltrowania:
-
<?php
-
-
$filterPost = new Zend_InputFilter($_POST);
-
-
?>
To zmienia wartośc przekazanej tablicy ($_POST) na NULL, więc bezpośredni dostęp do niej nie jest już dostępny. Teraz klasa Zend_InputFilter zapewnia kolekcję metod które filtrują dane według określonych kryteriów. Na przykład, jeśli chcesz otrzymać jedynie litery ze zmiennej $_POST['name'], możesz użyć metody getAlpha():
-
<?php
-
-
/* $_POST{{'name'}} = 'John123Doe'; */
-
-
$filterPost = new Zend_InputFilter($_POST);
-
-
/* $_POST = NULL; */
-
-
$alphaName = $filterPost->getAlpha('name');
-
-
/* $alphaName = 'JohnDoe'; */
-
-
?>
Argument który przekazujesz do każdej filtrującej metody jest nazwą klucza elementu tablicy który chcesz przefiltrować.
Obiekt (w tym przypadku $filterPost) jest chroniony, a dostęp do jego składników jest kontrolowany. Dlatego zawsze powinieneś
używać klasy Zend_InputFilter gdy chcesz uzyskać dostęp do danych przychodzących od użytkownika.
Klasa Zend_Filter zapewnia statyczne metody które działają analogicznie do metod klasy Zend_InputFilter.
Budowa systemu zarządzania newsami
Opublikowana wersja frameworka posiada wiele innych komponentów (a wiele innych jest w trakcie tworzenia), jednak komponenty omówione do tej pory pozwalają na zbudowanie prostej aplikacji. Stworzenie tej prostej aplikacji powinno pomóć Ci w poznaniu struktury frameworka.
Każdy tworzy aplikacje w inny sposób, a Zend Framework próbuje zmniejszyć tą różnorodność.
Kiedy zaczynam tworzyć aplikację, zaczynam od interfejsu. To nie oznacza, że spędzam wiele godzin pracując nad kodem html, arkuszami stylów i grafiką, jednak podchodzę do problemu z perspektywy użytkownika. Patrzę na aplikację jak na kolekcję stron, z których każda ma unikalny adres URL. Ten system zarządzania newsami składa się z następujących adresów URL:
/
/add/news
/add/comment
/admin
/admin/approve
/view/{id}
Musisz zacząć myśleć o tych adresach URL w kontekście kontrolerów. IndexController wyświetla newsy, AddController umożliwia dodawanie newsów i komentarzy, a AdminController umożliwia czynności administracyjne takie jak np. akceptowanie newsów. ViewController umożliwia wyświetlenie konkretnego newsa wraz z odpowiadającymi mu komentarzami.
Zacznij od usunięcia pliku FooController.php jeśli jeszcze istnieje. Następnie zmodyfikuj IndexController.php aby dodać właściwe akcje, a w nich dodaj komentarze które zarezerwują miejsce na kod który dodamy później:
-
<?php
-
-
Zend::loadClass('Zend_Controller_Action');
-
-
class IndexController extends Zend_Controller_Action
-
{
-
public function indexAction()
-
{
-
/* Wyświetla newsy. */
-
}
-
-
public function noRouteAction()
-
{
-
$this->_redirect('/');
-
}
-
}
-
-
?>
Następnie utwórz AddController.php:
-
<?php
-
-
Zend::loadClass('Zend_Controller_Action');
-
-
class AddController extends Zend_Controller_Action
-
{
-
function indexAction()
-
{
-
$this->_redirect('/');
-
}
-
-
function commentAction()
-
{
-
/* Dodajemy komentarz. */
-
}
-
-
function newsAction()
-
{
-
/* Dodajemy news. */
-
}
-
-
function __call($action, $arguments)
-
{
-
$this->_redirect('/');
-
}
-
}
-
-
?>
Zwróć uwagę, że metoda indexAction() kontrolera AddController nie powinna nigdy być wywołana. To mogłoby się zdarzyć jedynie gdy zostanie wywołany adres /add. Ponieważ użytkownik może uzyskać taki adres wpisując adres URL ręcznie, możesz przekierować takiego użytkownika do strony głównej, wyświetlić błąd lub zrobić cokolwiek innego.
Następnie utwórz AdminController.php:
-
<?php
-
-
Zend::loadClass('Zend_Controller_Action');
-
-
class AdminController extends Zend_Controller_Action
-
{
-
function indexAction()
-
{
-
/* Wyświetlamy interfejs administratora. */
-
}
-
-
function approveAction()
-
{
-
/* Akceptracja newsa. */
-
}
-
-
function __call($action, $arguments)
-
{
-
$this->_redirect('/');
-
}
-
}
-
-
?>
I utwórz jeszcze ViewController.php:
-
<?php
-
-
Zend::loadClass('Zend_Controller_Action');
-
-
class ViewController extends Zend_Controller_Action
-
{
-
function indexAction()
-
{
-
$this->_redirect('/');
-
}
-
-
function __call($id, $arguments)
-
{
-
/* Wyświetl news o numerze $id. */
-
}
-
}
-
-
?>
Tak jak w AddController, metoda indexAction() nie powinna nigdy być wywołana, więc możesz w takim wypadku zrobić to co uznasz za stosowne. ViewController trochę się różni od innych kontrolerów, ponieważ nie dostajemy tu informacji o akcji. Aby mogły działać adresy takie jak /view/23, musisz obsługiwać dynamiczne akcje za pomocą __call().



To miłe, że pofatygowałeś się z przetłumaczeniem tutoriala do Zend Framework. Czytanie tego rodzaju opracaowań jest bardziej przyjazne niż sucha lektura dokumentacji, a czytanie w rodzimym języku to wręcz luksus. Robisz fajną robotę ulatwiajac pierwszy kontakt z tym frameworkiem - mowie tu zarówno o powyższym tekscie, jak i o strone http://zf.naruniec.info/. Tak przy okazji czy to (http://framework.zend.com/developer/changeset/589) tlumaczenie tez jest Twojego autorstwa?