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
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.
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
ż
ró
ż
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());
}
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'))
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'));
Plik z chomika:
M.Konieczny
Inne pliki z tego folderu:
MySQL+PHP+phpMyAdmin (prezentacja, przykłady).zip
(5841 KB)
hodowla.rar
(86 KB)
salon seat.rar
(62 KB)
filmoteka.zip
(13 KB)
zadanie_5.zip
(4 KB)
Inne foldery tego chomika:
Analiza danych (Program R)
Automatyczne systemy biblioteczno-informacyjne
Bibliografia
Bibliotekarstwo
Biblioteki cyfrowe
Zgłoś jeśli
naruszono regulamin