Instalacja Zend Framework - podstawy
Artykuł dodany: 12 czerwca 2008. Ostatnia modyfikacja: 12 sierpnia 2009.
Stopień trudności (1 - dla początkujących, 5 - dla ekspertów): 1
Zacznijmy od najważniejszego. Zend Framework ma budowę modułową co oznacza, że poszczególne komponenty możemy stosować niezależnie, w zależności od aktualnych potrzeb. Na dobrą sprawę nie musimy nawet przegrywać całego folderu library/Zend – wystarczą nam tylko klasy oraz klasy zależne (wczytywane funkcją require/require_once w plikach frameworka) które mamy zamiar wykorzystać w swoim projekcie. ZF nie instalujemy w typowo rozumiany sposób – nie odpalamy przykładowego pliku install.php, nie podajemy danych użytkownika dla połączenia z bazą itp, jak miałoby to miejsce w przypadku instalacji sklepu internetowego czy bloga. Układ plików, nazewnictwo klas zależą od wyrobionych nawyków i koncepcji tak więc tekst ten może jedynie sugerować a nie narzucać pewne rozwiązania.
Jednym z najważniejszych zadań jakie powinniśmy sobie postawić przed utworzeniem nowego projektu jest opracowanie struktury katalogowej. Jest to o tyle ważne że w późniejszym etapie pozwoli uniknąć zbędnego przerzucania plików i zmian ścieżek oraz umożliwi łatwe przenoszenie całego wzoru do nowych projektów. Na stronach wiki możemy znaleźć kilka przykładowych rozwiązań.
Klasyczny styl uniksowy
/application /etc /lib /Zend /(inne biblioteki) /usr /controllers /models /views /var /sessions /cache /view_compiles /htdocs /images /scripts /styles
Konwencjonalny
/application /config /controllers /models /views /htdocs /images /scripts /styles index.php /library /Zend /(inne biblioteki) /tmp /sessions /cache /view_compiles
Konwencjonalny modułowy
/application /config (opcjonalnie) /(module 1) /config (opcjonalnie) /controllers /models /views /(module 2) /controllers /models /views /(module n) /controllers /models /views /htdocs /images /scripts /styles index.php /library /Zend /(inne biblioteki) /tmp /sessions /cache /view_compiles
Najważniejsze co możemy zauważyć jest to, że żadna z bibliotek, modułów czy plików tymczasowych nie znajduje się w katalogu dostępnym z poziomu zwykłego użytkownika www. Jest to bardzo ważne ze względów bezpieczeństwa. Dodatkowo po przegraniu wszystkich plików powinniśmy zadbać o nadanie plikom odpowiednich uprawnień. W systemie uniksowym jeżeli masz dostęp przez SSH wykonaj przykładowo polecenie “chmod 700 library/ -R” (więcej o chmod możesz znaleźć chociażby na polskiej wikipedii. Nadawanie uprawnień oferuje także dowolny klient FTP z tym że oczywiście cała czynność potrwa znacznie dłużej.
Gdy uporaliśmy się już ze strukturą katalogową pora wczytać pliki frameworka. Powinniśmy ustalić dodatkową ścieżkę wyszukiwania zawierającą biblioteki ZF. Można to wykonać dwojako:
set_include_path('../library/');
ini_set('include_path', '../library/');
gdzie oczywiście ‘..library/’ zależy od utworzonej wcześniej struktury katalogowej. Zobacz również dokumentację php – funkcja set_include_path. Bardziej zaawansowany kod może również uwzględniać już istniejące ustawienia:
ini_set('include_path', ini_get('include_path').PATH_SEPARATOR.'../library/');
PATH_SEPARATOR to stała zawierająca odpowiedni dla danego systemu (: pod linuksem, ; pod windowsem) separator.
Pora sprawdzić czy wszystko działa. Wczytajmy przykładową klasę.
require_once 'Zend/Mail.php'; $mail = new Zend_Mail();
Brak błędu oznacza oczywiście poprawną konfigurację. Jeżeli jednak coś poszło nie tak przeczytaj uważnie wszystkie komunikaty i postaraj się je poprawić.
Tyle jeżeli chodzi o podstawową konfigurację w przypadku wykorzystywania pojedynczych komponentów. Dla modelu MVC możesz również dodać reguły przepisywania:
Apache
RewriteEngine On RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule ^.*$ index.php [NC,L]
Lighttpd
url.rewrite-once = ( ".*\?(.*)$" => "/index.php?$1", ".*\.(js|ico|gif|jpg|png|css)$" => "$0", "" => "/index.php" )
IIS
RewriteRule ^[\w/\%]*(?:\.(?!(?:js|ico|gif|jpg|png|css|html)$)[\w\%]*$)? /index.php [I]
Oczywiście nie oznacza to że musisz je stosować. Zend Framework jest projektem mającym wspomagać proces projektowania aplikacji a nie narzucającym określone rozwiązania. Tak więc oba poniższe linki będą poprawne:
http://localhost/galeria/dodajzdjecie http://localhost/index.php/galeria/dodajzdjecie
Wczytywanie klas można wykonywać również w sposób automatyczny poprzez Zend_Loader a konkretnie statyczną metodę Zend_Loader::registerAutoload(). Na poniższym przykładzie:
<?php require_once 'Zend/Loader.php'; Zend_Loader::registerAutoload(); $mail = new Zend_Mail(); $config = new Zend_Config_Ini();
Nazwy Zend_Mail i Zend_Config_Ini zostaną automatycznie przekonwertowane na Zend/Mail.php oraz Zend/Config/Ini.php a pliki te wczytane. Metoda ta zadziała również dla naszych klas należy tylko pamiętać o konwencji nazewniczej (oraz że w systemach uniksowych wielkość liter ma znaczenie. `Przyklad` to zupełnie inny katalog niż `przyklad`).
Od wersji 1.8 nastąpiła drobna zmiana w działaniu autoloadera. Odpowiednikiem powyższego kodu jest:
require_once 'Zend/Loader/Autoloader.php'; $autoloader = Zend_Loader_Autoloader::getInstance(); $autoloader->setFallbackAutoloader(true);
Na końcu chciałbym jeszcze zwrócić uwagę na “bootstraping”. Dzięki przepisywaniu URLi wszystkie żądania kierowane do aplikacji powinny przechodzić przez jeden plik którym będzie zazwyczaj index.php. Jego zadaniem będzie wczytanie konfiguracji, wykonanie połączeń – ogólnie przetworzenie całości. Z powodu wymienionych wcześniej względów bezpieczeństwa dobrze by było umieścić wszystkie kluczowe pliki poza strukturą katalogową dostępną z poziomu www a plik index.php dostępny dla klienta (np. przeglądarki), występujący na tym samym poziomie co zdjęcia, CSS, JS niech zajmuje się tylko uruchomieniem aplikacji właściwej. Końcowy przykład naszego projektu może wyglądać następująco:
Struktura katalogowa według modelu konwencjonalnego
/application /config /controllers /models /views bootstrap.php /htdocs <- katalog publiczny, występuje również pod nazwami www, public_html /images /scripts /styles index.php /library /Zend /(inne biblioteki) /tmp /sessions /cache /view_compiles
Plik index.php
require_once '../application/bootstrap.php';
Plik bootstrap.php
<?php ini_set('include_path', '../library/'); require_once('Zend/...'); //...dalsze przetwarzanie aplikacji
Albo według innego modelu:
Plik index.php
require_once('../application/bootstrap.php'); Bootstrap::run();
Plik bootstrap.php
class Bootstrap { public static function run() { self::setupEnvironment(); self::loadMod(); itd... } }
Od wersji 1.8 wprowadzono Zend_Application który jest odpowiednikiem modelu drugiego.
Dodaj komentarz
- php
- zend framework
- kodowanie
- mysql
- xml
- xhtml
- html
- postgresql
- css
- http
- sieć
- internet
- programowanie
- bazy danych
- javascript
- jquery
- zend framework 3
- apache
- sqlite
- phptal
Komentarze
Nie ma jeszcze żadnych komentarzy do wyświetlenia. Może chcesz zostać pierwszą osobą która podzieli się swoją opinią?