Laboratorium 6 – Tworzenie bloga w Zend Framework

Transkrypt

Laboratorium 6 – Tworzenie bloga w Zend Framework
Technologie programowania systemów internetowych
Laboratorium 6
Laboratorium 6 – Tworzenie bloga w Zend Framework
Przygotowanie bazy danych
1. Wykonaj skrypt blog.sql, który założy w bazie danych dwie tabele oraz wpisze do nich
przykładowe dane.
Tabela blog_uzytkownicy posłuży do kontroli dostępu do bloga. Pole grupa w tabeli
blog_uzytkownicy zawierać będzie jedną z wartości: admin, user.
Tabela blog_wpisy przechowywać będzie posty dodawane do bloga. Pole autor odnosić
się będzie do indeksu użytkownika w tabeli blog_uzytkownicy. Pola: tytul, tresc i
skrot zawierać będą odpowiednio: tytuł wpisu, właściwą treść oraz wersję skróconą (do
wyświetlenia na stronie głównej z odnośnikiem Więcej….).
Pola id w obu tabelach będą automatycznie inkrementowane.
Tworzenie projektu
1. Stwórz w Netbeans nowy projekt PHP z obsługą Zend Framework, sprawdź działanie
nowego projektu.
Konfiguracja projektu
Zmiana przestrzeni nazw
1. Otwórz w edytorze tekstu plik application.ini (znajduje się w katalogu
zfblog/application/configs).
2. Znajdź linię:
appnamespace = "Application"
I zamień na:
appnamespace = "Blog"
Podanej przestrzeni nazw będziemy używać jako przedrostka nazw tworzonych klas.
Pozwoli to na automatyczne ładowanie definicji klas przez Zend Framework.
Strona 1 z 6
Technologie programowania systemów internetowych
Laboratorium 6
Konfiguracja dostępu do bazy danych
1. Skonfiguruj dostęp do bazy danych – na końcu sekcji [production], przed sekcją
[staging : production], dodaj następujące linie:
resources.db.adapter = "pdo_sqlite"
resources.db.params.dbname = APPLICATION_PATH "/../blog.db"
Tworzenie modeli
1. Do dostępu do danych posłużą klasy dziedziczące z Zend_Db_Table. Utworzymy po jednej
klasie dla każdej tabeli w bazie danych.
2. W katalogu application/models utwórz plik Wpisy.php. W nim umieść definicję klasy
Blog_Model_Wpisy:
<?php
class Blog_Model_Wpisy extends Zend_Db_Table_Abstract
{
protected $_name = 'blog_wpisy';
}
Pole $_name zawiera nazwę tabeli w bazie danych, do której dostęp będziemy uzyskiwać za
pomocą tworzonej klasy.
3. Uwaga! Nazwy tworzonych klas są istotne – także wielkość liter oraz użyte podkreślenia.
Trzymanie się ustalonej konwencji nazewnictwa pozwoli na automatyczne ładowanie klas.
Autoloader na podstawie nazwy klasy Blog_Model_Wpisy będzie szukał jej definicji w
katalogu application/models/, w pliku Wpisy.php.
4. W ten sam sposób utwórz model dla tabeli blog_uzytkownicy.
Wyświetlanie postów na stronie głównej
1. Na stronie głównej naszego bloga umieścimy listę wszystkich wpisów, wyświetlając ich
tytuły oraz skróty.
2. W kontrolerze IndexController, w akcji indexAction, umieścimy kod pobierający z
modelu wszystkie wpisy. Do pobrania wszystkich rekordów z bazy służy metoda
fetchAll():
public function indexAction() {
$mdl = new Blog_Model_Wpisy();
$wpisy = $mdl->fetchAll();
$this->view->dane=$wpisy;
}
Strona 2 z 6
Technologie programowania systemów internetowych
Laboratorium 6
Znaczenie powyższego kodu jest następujące:
a. Tworzymy obiekt klasy Blog_Model_Wpisy – obiekt ten pośredniczy w dostępie
do tabeli wpisy.
b. Pobieramy wszystkie rekordy z tabeli.
c. Pobrane rekordy przekazujemy do widoku.
3. Przekazane do widoku rekordy musimy jeszcze wyświetlić. Przejdź do pliku z widokiem,
index.phtml.
4. Przekazany zbiór rekordów można traktować jak tablicę obiektów. Można po niej iterować
za pomocą pętli foreach. Każdy element tablicy zawiera pola odpowiadające kolumnom w
tabeli bazy danych. Przykład użycia:
<?php
foreach($this->dane as $wpis) {
echo $wpis->tytul;
}
?>
Zwróć uwagę na zależność pomiędzy przypisaniem danych do widoku w kontrolerze oraz
dostępem do tych danych w widoku. Jeżeli w kontrolerze wykonaliśmy przypisanie:
$this->view->dane = $wpisy;
wówczas w widoku dostęp do danych mamy poprzez zmienną:
$this->dane
5. Kompletny kod widoku wyświetlającego listę wpisów:
<h1>ZF Blog</h1>
<?php
foreach($this->dane as $wpis) {
echo '<div class="wpis">';
echo '<h2>' . $wpis->tytul . '</h2>';
echo '<p>' . $wpis->skrot . '</p>';
echo '</div>';
}
?>
Wyświetlanie całej treści wpisu
1. Dodamy akcję pokaz powodującą wyświetlenie pełnej treści wybranego wpisu. Akcja
będzie wywoływana po kliknięciu przez użytkownika linka Więcej… pod skrótem wpisu na
stronie głównej.
2. Akcja przyjmować będzie jeden parametr przekazany poprzez URL – id wpisu, który należy
wyświetlić.
3. Dodaj nową akcję wydając komendę:
Strona 3 z 6
Technologie programowania systemów internetowych
Laboratorium 6
zf create action pokaz Index
Spowoduje to dodanie nowej akcji pokazAction w kontrolerze IndexController, a
także utworzenie odpowiedniego pliku widoku (pokaz.phtml).
4. W kodzie akcji wykonamy kolejno następujące czynności:
a. Pobranie id wpisu z parametrów żądania – metoda
$this->getRequest()->getParam().
b. Stworzenie instancji modelu Blog_Model_Wpisy.
c. Pobranie wpisu o podanym id – metoda find().
d. Przekazanie pobranego wpisu do widoku.
Kompletny kod akcji pokaz:
public function pokazAction() {
$id = $this->getRequest()->getParam('id');
$mdl = new Blog_Model_Wpisy();
$wpis = $mdl->find($id)->current();
$this->view->wpis = $wpis;
}
Metoda find przyjmuje jako argument wartość klucza głównego w szukanym rekordzie
(lub tablicę z listą kluczy głównych wielu szukanych rekordów). Zwrócić może kilka
rekordów – jeśli mamy pewność, że zwróci dokładnie jeden, pobieramy go metodą
current().
5. Uzupełnimy kod widoku index.phtml, tak by pod tytułem i skrótem wpisu pojawiał się
link Więcej… prowadzący do akcji pokaz.
W pliku index.phtml, wewnątrz pętli wyświetlającej wpisy, dodaj następujący kod:
$url = $this->baseUrl() . '/index/pokaz/id/' . $wpis->id;
echo '<p><a href="' . $url . '">Więcej...</a></p>';
Tak utworzony link będzie prowadził do akcji pokaz w kontrolerze index, przekazując jej
jeden parametr o nazwie id i wartości równej polu id z wyświetlanego wpisu. Przykładowy
link dla id=7:
<a href="http://localhost/blog/public/index/pokaz/id/7">Więcej...</a>
Zadanie
1. Dodaj w widoku pokaz.phtml kod wyświetlający szczegóły wpisu (tytuł, data dodania,
pełna treść).
Strona 4 z 6
Technologie programowania systemów internetowych
Laboratorium 6
Layout strony
1. Włączymy obsługę Zend Layout – mechanizmu pozwalającego na stworzenie szablonu,
wewnątrz którego wyświetlane będą wszystkie widoki.
2. Z linii poleceń wydaj komendę:
zf enable layout
Spowoduje to:
a. dodanie w pliku index.php kodu inicjalizującego Zend_Layout,
b. dodanie w pliku konfiguracyjnym application.ini wpisu wskazującego na
katalog szablonów,
c. utworzenie głównego szablonu o nazwie layout.phtml.
3. Otwórz w edytorze plik application/layouts/scripts/layout.phtml, przyjrzyj
się jego zawartości. Sprawdź działanie aplikacji.
4. Zmień kod szablonu na następujący:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>ZF Blog</title>
<meta http-equiv="Content-Type"
content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css"
href="<?php echo $this->baseUrl(); ?>/main.css">
</head>
<body>
<div id="page">
<div id="menu">
<a href="<?php echo $this->baseUrl(); ?>">Strona główna</a> |
<a href="">Dodaj wpis</a>
<a href="">Zaloguj</a>
</div>
<div id="content">
<?php echo $this->layout()->content; ?>
</div>
</div>
</body>
</html>
Strona 5 z 6
Technologie programowania systemów internetowych
Laboratorium 6
5. Stwórz plik main.css, umieść go w katalogu public. Przykładowa zawartość pliku:
body {
background-color: #ffffd0;
}
#page {
background-color: white;
margin: 0 auto;
width: 640px;
}
#menu {
background-color: blue;
text-align: center;
}
#menu a {
color: white;
font-family: sans-serif;
}
.wpis {
border: thin dashed gray;
}
Strona 6 z 6