zadanie7.pdf

(128 KB) Pobierz
Aplikacje WWW - laboratorium
CakePHP
Celem ć wiczenia jest przygotowanie prostej aplikacji internetowej wykorzystuj ą cej
architektur ę szkieletow ą CakePHP. Ć wiczenie prezentuje podstawowe aspekty tworzenia
aplikacji w oparciu o architektur ę szkieletow ą (ang. application framework ) bazuj ą c ą na
paradygmacie Model-View-Controller (MVC). W ramach tutorialu powstanie prosta aplikacja
zawieraj ą ca przykładowy kontroler, obiekty modelu, obiekty widoku oraz obiekty
pomocnicze. Zaprezentowane tak ż e zostan ą przykłady wykorzystania funkcjonalno ś ci
wbudowanej w architektur ę szkieletow ą (walidacja danych, odwzorowanie obiektowo-
relacyjne, itp.)
Ć wiczenie mo ż na wykona ć na dowolnym komputerze, którym zainstalowano serwer HTTP
(np. Apache) z obsług ą PHP oraz baz ę danych MySQL. Rozwi ą zania ć wicze ń omawianych w
poni ż szym zestawie zostały przygotowane z wykorzystaniem pakietu XAMPP (wersja 1.7.3,
dost ę pnego pod adresem: http://www.apachefriends.org/en/xampp.html ).
UWAGA : CakePHP wykorzystuje bardzo wiele konwencji zwi ą zanych z wła ś ciwym
nazewnictwem elementów (kontrolerów, modeli, widoków). Wybór poszczególnych nazw dla
klas i plików jest nieprzypadkowy , w celu płynnego wykonania tutorialu nale ż y kierowa ć si ę
ś ci ś le podanymi zaleceniami dotycz ą cymi nazw obiektów.
1. Pobierz ze strony https://github.com/cakephp/cakephp/downloads aktualn ą stabiln ą
wersj ę
architektury
CakePHP
(1.3.8)
i
rozpakuj
archiwum
do
katalogu
xampp/htdocs/cake
2. Uruchom program XAMPP (serwer Apache i baz ę danych MySQL), a nast ę pnie
uruchom program phpMyAdmin (przycisk Admin na panelu kontrolnym programu
XAMPP). Utwórz baz ę danych o nazwie cakephp . Nast ę pnie, utwórz w bazie
danych cakephp tabel ę books o nast ę puj ą cym schemacie (upewnij si ę , ż e ła ń cuchy
znaków b ę d ą kodowane w utf8_polish_ci, pole Collation)
kolumna
typ i własno Ś ci
id
INT UNSIGNED AUTO_INCREMENT PRIMARY KEY
title
VARCHAR(50)
author
VARCHAR(20)
VARCHAR(20)
genre
Wprowad ź do nowoutworzonej tabeli kilka przykładowych rekordów
848174820.049.png 848174820.050.png 848174820.051.png 848174820.052.png 848174820.001.png 848174820.002.png 848174820.003.png 848174820.004.png 848174820.005.png 848174820.006.png
 
3. Przejd ź do katalogu /app/config/ i utwórz kopi ę pliku
database.php.default . Nazwij nowy plik database.php . Edytuj utworzony
plik i ustaw w zmiennej $default parametry logowania si ę do bazy danych
var $default = array (
'driver' => 'mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'root',
'password' => '',
'database' => 'cakephp',
'prefix' => '',
'encoding' => 'utf8',
);
4. Przejd ź do strony http://localhost/cake/ i upewnij si ę , ż e lokalna instalacja si ę
powiodła.
5. Pierwszym krokiem ć wiczenia b ę dzie utworzenie klasy modelu, która b ę dzie
reprezentowała tabel ę w bazie danych. Instancje klasy modelu b ę d ą odpowiadały
wierszom w bazie danych. Przejd ź do katalogu /app/models/ i utwórz w nim plik
book.php , a nast ę pnie umie ść w pliku poni ż szy kod.
<?php
class Book extends AppModel {
var $name = 'Book';
}
?>
6. W kolejnym kroku utworzysz najprostszy kontroler i wyposa ż ysz go w metod ę
index() , która zostanie automatycznie wywołana w odpowiedzi na żą danie HTTP.
Kontroler dla modelu Book powinien nosi ć nazw ę BooksController i by ć
umieszczony w pliku books_controller.php , w katalogu
/app/controllers . Przejd ź do tego katalogu i utwórz wspomniany plik,
wypełniaj ą c go poni ż sz ą tre ś ci ą (akcja set() słu ż y do przekazania danych z
kontrolera do widoku).
<?php
class BooksController extends AppController {
var $name = 'Books';
var $helpers = array ('Html','Form');
function index() {
$this->set('books', $this->Book->find('all');
}
}
?>
7. Przejd ź do strony http://localhost/cake/books/index i sprawd ź , czy strona działa
prawidłowo.
848174820.007.png 848174820.008.png 848174820.009.png 848174820.010.png 848174820.011.png 848174820.012.png 848174820.013.png 848174820.014.png 848174820.015.png
 
8. Przejd ź do katalogu /app/views i utwórz nowy katalog books . Wejd ź do nowego
katalogu i utwórz w nim szablon widoku o nazwie odpowiadaj ą cej nazwie akcji, która
aktywizuje dany widok ( index.ctp ). Umie ść w pliku widoku poni ż szy kod:
<h1>Books</h1>
<table>
<tr>
<th>Id</th>
<th>Title</th>
<th>Author</th>
<th>Genre</th>
</tr>
<?php foreach ($books as $book): ?>
<tr>
<td><?php echo $book['Book']['id']; ?></td>
<td>
<?php echo $this->Html->link($book['Book']['title'],
array('action' => 'view', $book['Book']['id']));?>
</td>
<td>
<?php echo $this->Html->link('Usuń',
array('action' => 'delete', $book['Book']['id']),
null, 'Czy jesteś pewna(y)?')?>
<?php echo $this->Html->link('Edytuj',
array('action' => 'edit', $book['Book']['id']));?>
</td>
<td>
<?php echo $book['Book']['genre']; ?>
</td>
</tr>
<?php endforeach; ?>
</table>
Przeanalizuj starannie powy ż szy przykład. Zobacz, w jaki sposób nast ę puje przej ę cie
danych wysłanych przez kontroler. Zauwa ż ż ne sposoby wywołania metody
Html link() (Html to komponent pomocniczy rejestrowany automatycznie w ka ż dej
aplikacji). Uruchom aplikacj ę i przejd ź do adresu http://localhost/cake/books/
9. Akcje zdefiniowane w poprzednim widoku ( view, delete, edit ) nie zostały
jeszcze zdefiniowane. Przejd ź do kontrolera i dodaj do definicji klasy poni ż sz ą metod ę
function view($id) {
$this->Book->id = $id;
$this->set('book', $this->Book->read());
}
848174820.016.png 848174820.017.png 848174820.018.png 848174820.019.png 848174820.020.png 848174820.021.png
10. Przejd ź do katalogu /app/views/books i utwórz nowy plik o nazwie view.ctp ,
a nast ę pnie umie ść w nim poni ż szy kod, uruchom aplikacj ę i przetestuj jego działanie.
<ul>
<li><b>tytuł</b>:<?php echo $book['Book']['title']?></li>
<li><b>autor</b>:<?php echo $book['Book']['author']?></li>
<li><b>gatunek</b>:<?php echo $book['Book']['genre']?></li>
</ul>
<a href="/cake/books">powrót</a>
11. W nast ę pny kroku obsłu ż ysz procedur ę dodawania nowych krotek. Wró ć do definicji
kontrolera i umie ść tam nast ę puj ą c ą funkcj ę :
function add($data) {
if (!empty($this->data)) {
if ($this->Book->save($this->data)) {
$this->Session->setFlash('Książka zosała dodana');
$this->redirect(array('action'=>'index'));
}
}
}
12. Po zaimplementowaniu logiki dodawania nowych ksi ąż ek mo ż esz przej ść do widoku
udost ę pniaj ą cego
formatk ę
do
dodawania
ksi ąż ek.
Utwórz
w
katalogu
/app/views/books plik add.ctp i umie ść w nim:
<h1>Dodaj książkę</h1>
<?php
$options = array('dramat' =>'dramat', 'komedia' =>'komedia');
echo $this->Form->create('Book');
echo $this->Form->input('title');
echo $this->Form->input('author');
echo $this->Form->select('genre', $options, 'dramat');
echo $this->Form->end('Zapisz książkę');
?>
13. Wró ć
do
pliku index.ctp
i
przed
znacznikiem <table>
umie ść
link
umo ż liwiaj ą cy przej ś cie do formularza dodawania nowej ksi ąż ki.
<p>
<?php echo $this->Html->link('Dodaj książkę',
array('action' => 'add')); ?>
</p>
14. CakePHP zawiera bardzo bogaty silnik walidacji danych. Przejd ź do edycji ź ródła
klasy modelu i wprowad ź zmienn ą $validate , która zawiera reguły walidacji.
Nast ę pnie, sprawd ź , czy mo ż esz doda ć nowy rekord nie podaj ą c tytułu wydarzenia.
var $validate = array('title' => array('rule' => 'notEmpty'))
848174820.022.png 848174820.023.png 848174820.024.png 848174820.025.png 848174820.026.png 848174820.027.png 848174820.028.png 848174820.029.png 848174820.030.png 848174820.031.png 848174820.032.png 848174820.033.png 848174820.034.png 848174820.035.png 848174820.036.png
15. Nast ę pnym krokiem jest oprogramowanie akcji usuwania ksi ąż ek. Przejd ź do
kontrolera i dodaj metod ę , która b ę dzie wywoływana w momencie klikni ę cia na link
Usu ń .
function delete($id) {
if ($this->Book->delete($id)) {
$this->Session->setFlash('Książka została usunięta');
$this->redirect(array('action' => 'index'));
}
}
16. Ostatni ą operacj ą CRUD która nie została jeszcze oprogramowana jest operacja
edycji. Przejd ź do katalogu app/views i utwórz plik edit.ctp z nast ę puj ą c ą
tre ś ci ą :
<h1>Edytuj książkę</h1>
<?php
$options = array ('dramat' => 'dramat','komedia' => 'komedia');
echo $this->Form->create('Book', array('action' => 'edit'));
echo $this->Form->input('id', array('type' => 'hidden'));
echo $this->Form->input('title');
echo $this->Form->input('author');
echo $this->Form->select('genre', $options, 'dramat');
echo $this->Form->end('Zapisz książkę');
?>
17. Edytuj kontroler aplikacji i dodaj logik ę biznesow ą odpowiedzialn ą za edycj ę ksi ąż ek.
function edit($id = null) {
$this->Book->id = $id;
if (empty($this->data)) {
$this->data = $this->Book->read();
} else {
if ($this->Book->save($this->data)) {
$this->Session->setFlash('Książka została zmieniona');
$this->redirect(array('action' => 'index'));
}
}
}
18. CakePHP wykorzystuje mechanizm routingu do odwzorowania żą da ń http na akcje
konkretnych kontrolerów. Głównym plikiem konfiguracyjnym jest
/app/config/routes.php . Edytuj ten plik w celu dodania nowej reguły, która
przekieruje żą dania do korzenia aplikacji do metody index() kontrolera
BooksController . Wykomentuj domy ś ln ą reguł ę (dotycz ą c ą kontrolera
PagesController dostarczanego domy ś lnie ze ś rodowiskiem) i zamie ń j ą na
poni ż sz ą . Nast ę pnie otwórz w przegl ą darce adres http://localhost/cake
Router::connect('/',
array('controller' => 'books', 'action' => 'index'));
848174820.037.png 848174820.038.png 848174820.039.png 848174820.040.png 848174820.041.png 848174820.042.png 848174820.043.png 848174820.044.png 848174820.045.png 848174820.046.png 848174820.047.png 848174820.048.png
 
Zgłoś jeśli naruszono regulamin