Witaj, Gościu O nas | Kontakt | Mapa
Wortal Forum PHPEdia.pl Planeta Kubek IRC Przetestuj się!

Pierwsze kroki z Zend Framework

Zaczynamy

Kontroler Zend Framework (Zend_Controller) został zaprojektowany w ten sposób, by obsługiwać strony z przyjaznymi adresami URL. Aby to uzyskać, wszystkie zapytania muszą przejść przez jeden plik index.php, znany jako plik domyślny serwera. Pozwala to stworzyć swego rodzaju punkt centralny wszystkich stron naszej aplikacji, zapewniający tym samym, że środowisko (serwer) gotowy jest do uruchomienia aplikacji. Osiągamy to przez utworzenie pliku .htaccess w katalogu zf-tutorial: Zf-tutorial/.htaccess

	RewriteEngine on
	RewriteRule .* index.php

	php_flag magic_quotes_gpc off
	php_flag register_globals off

RewriteRule (zasada przekierowania) jest bardzo prosta; oznacza, że wszystkie URL-e będą przekierowywane do pliku index.php.

Ustalmy też od razu kilka wartości konfiguracyjnych PHP.ini odpowiadających za bezpieczeństwo naszej aplikacji. Ustawienia te powinny znajdować się bezpośrednio w pliku PHP.ini, ale dla pewności ustawmy je ponownie. Proszę przy tym pamiętać, że wartość php_flags ustawiona w .htaccess działać będzie tylko w przypadku, kiedy PHP nie jest w trybie CGI/FastCGI. Jeśli mamy do czynienia z takim przypadkiem, wartości te powinny być ustawione bezpośrednio w pliku PHP.ini.

Zapytania plików graficznych, skryptów JavaScript lub arkuszy stylów nie powinny być przekierowywane bezpośrednio do pliku index.php. Dzięki temu, że wymienione pliki trzymamy w katalogu public, z łatwością możemy tak skonfigurować serwer Apache, by absługiwał je bezpośrednio - wystarczy w katalogu public utworzyć nowy plik .htaccess:

Zf-tutorial/public/.htaccess:

RewriteEngine off

Powinniśmy też zabezpieczyć katalogi naszej aplikacji tworząc kilka osobnych plików .htaccess: zf-tutorial/application/.htaccess:

deny from all

zf-tutorial/library/.htaccess:

deny from all

Aby pliki .htaccess używane były przez serwer Apache, powinniśmy wcześniej ustawić wartość AllowOverride All w pliku httpd.conf. Prezentowana tutaj idea użycia wielu plików .htaccess zaczerpnięta została z artukułu Jaysona Minarda “Buleprint for PHP Applications: Bootstrapping (Part 2)”. Polecam lekturę całej serii tych artykułów.

Plik index.php

Plik zf-tutorial/index.php jest naszym plikiem startowym, zaczynamy więc od następującego kodu:

Zf-tutorial/index.php:

<?php
error_reporting(E_ALL|E_STRICT);
date_default_timezone_set('Europe/London');
set_include_path('.' . PATH_SEPARATOR . './library/'. PATH_SEPARATOR . './application/models'. get_include_path());
include "Zend.php";
Zend::loadClass('Zend_Controller_Front');
Zend::loadClass('Zend_Controller_RewriteRouter');

// Tworzymy controller
$router = new Zend_Controller_RewriteRouter();
$baseUrl = substr($_SERVER['PHP_SELF'], 0,strpos($_SERVER['PHP_SELF'], '/index.php'));
$router->setRewriteBase($baseUrl);
$controller = Zend_Controller_Front::getInstance();$controller->setRouter($router);

// Uruchamiamy!
$controller->run('./application/controllers');

Zauważmy tutaj, że nie dodajemy znacznika ?> na końcu pliku, ponieważ nie jest to potrzebne, a pomaga zapobiec wielu trudnym do wykrycia problemom.

Wyjaśnianie działania pliku index.php:

error_reporting(E_ALL|E_STRICT);
date_default_timezone_set('Europe/London');

Powyższe linie zapewniają, że będziemy otrzymywać komunikaty o wszystkich błędach (zakładając oczywiście, że wartość display_errors w pliku php.ini jest ustawiona na ON). Jak widać, definiujemy również naszą strefę czasową, ponieważ wymaga tego samo PHP 5.1. Oczywiście wybierz Twoją strefę czasową.

set_include_path('.' . PATH_SEPARATOR . './library/'
. PATH_SEPARATOR . './application/models'
. get_include_path());
include "Zend.php";

Zend Framework został tak zaprojektowany, że jego pliki muszą być zapisane w include_path. My także ustawimy nasze katalogi Model w include_path, ułatwiając ich ładowanie. Na początek powinniśmy wczytać ( include) plik Zend.php, co da nam dostęp do klasy Zend, która zawiera potrzebne statyczne funkcje pozwalające z kolei na wczytanie dowolnej klasy Zend Framework.

Zend::loadClass('Zend_Controller_Front');
Zend::loadClass('Zend_Controller_RewriteRouter');

Zend::loadClass ładuje klasę o danej nazwie. Możliwe jest to dzięki zamianie underscores (_) w nazwie klasy na separator scieżki oraz dodając na koniec .php. Teraz więc klasa Zend_Controller_Front ładowała będzie plik Zend/Controller/Front.php. Jeżeli używamy tej samej konwencji nazw w swoich klasach, możemy użyć funkcji Zend::loadClass(), by załadowała nasze klasy.

Domyślny router w Zend Framework zakłada, że nasza strona znajduje się w katalogu głównym serwera (np. /index.php). Jednak w naszym przypadku stronę uruchomić chcemy z podkatalogu zf-tutorial, w związku z czym użyjemy Zend_Controller_RewriteRouter. Ustalamy bazowy adres routera na poprawny adres naszego pliku index.php. W tym celu użyjemy $_SERVER['PHP_SELF'], co powinno znakomicie sprawdzać się w większości przypadków. Jeśli jednak nastąpią jakieś problemy, powinniśmy zamień wartość $baseUrl na adres do pliku index.php:

$router = new Zend_Controller_RewriteRouter();
$baseUrl = substr($_SERVER['PHP_SELF'], 0,
strpos($_SERVER['PHP_SELF'], '/index.php'));
$router->setRewriteBase($baseUrl);
$controller = Zend_Controller_Front::getInstance();
$controller->setRouter($router);

Na koniec dochodzimy do punktu najważniejszego. Tworzymy obiekt klasy kontolera definiując potrzebny router i uruchamiając naszą aplikację. Zauważmy przy okazji, że funkcja run() akceptuje argument, który jest ścieżką do katalogu z kontrolerami.

// Uruchomienie!
$controller->run('./application/controllers');

Kiedy uruchomisz http://localhost/zf_tutorial powinniśmy zobaczyć "Fatal error", podobny do tego:

Fatal error: Uncaught exception 'Zend_Exception' with message 'File
"./application/controllers\IndexController.php" was not found.
(etc.)

Świadczy to o tym, że nie stworzyliśmy jeszcze naszej aplikacji. Zanim to jednak uczynimy, omówmy pokrótce, co będzimy robić.

Informacje na podobny temat:
Wasze opinie
Wszystkie opinie użytkowników: (7)
Proponuję alternatywę
Wtorek 09 Luty 2010 1:23:49 pm - siema1980

Proponuję zapoznać się z moim kursem na temat ZF, jest to blog na temat podstaw i myślę, że wszystkim początkującym się przyda - szczególnie tym którzy nie wiedzą jak w ogóle postawić pierwsze kroki w używaniu tej technologii.

http://zend-framework.web-portals.pl

Zapraszam serdecznie.

Zmiany w stosunku do ZF 1.0
Sobota 07 Lipiec 2007 11:41:02 am - elem84

$config->db->config->asArray() ta część jest nieaktualna dla wersji 1.0 należy ją zastąpić $config->db->config->toArray()

Zend
Poniedziałek 26 Luty 2007 10:15:26 am - mrm

czy na pewno to działa ?, stworzyłem odpowiedni pliki, katalogi, skopiowałem cały kod, i nie działa...;/, wydaję mi się że może być 5 przyczyn takiego stanu rzeczy:
1 - źle skopiowałem kod, przeoczyłem cos...
2- mam coś nie tak z serwerem
3- korzystam z wersji 0.8
4- to po prostu nie działa
5 -inne

Szkoła kononowicza
Poniedziałek 29 Styczeń 2007 4:03:22 am - MARIO77 <manius162_at_wp.pl>

cytat:
"Zend Framework rezerwuje również domyślny controller i nie powinno być dla nas niespodzianką, że też się nazywa się on index."

Szkoła KONONOWICZA :D

Wspólny kod HTML
Sobota 16 Grudzień 2006 11:52:21 pm - vallthore

Wspólny kod HTML jest chyba trochę ucięty, a dokładnie początek strony 10 z oryginalnego pdf'a

hehe
Piątek 24 Listopad 2006 4:29:49 pm - sabistik <wiktorski_at_poczta.php.pl>

hehe, ano dobre, dobre. Już poprawiam.

tworzymy widok
Środa 22 Listopad 2006 1:48:14 am - orideith

cytuje ..w związku z czym nie ma seksu używać akcji. hmm seks i zend :)
Nie mogłem się powstrzymac.

Mentax.pl    NQ.pl- serwery z dodatkiem świętego spokoju...   
O nas | Kontakt | Mapa serwisu
Copyright (c) 2003-2020 php.pl    Wszystkie prawa zastrzeżone    Powered by eZ publish Content Management System eZ publish Content Management System