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?