RTFB!
3 Mar
Kaj je CakePHP ? CakePHP je PHP framework ki uporablja MVC arhitekturo. MVC je Model Controller View. Kaj to pomeni. To pomeni da imamo strukturo strani ločeno po Model-ih View-ih in Controller-jih.
Kaj vse omogoča ta zadeva sem kar skopiral iz njihove strani …
/* * Model, View, Controller Architecture * View Helpers for AJAX, Javascript, HTML Forms and more * Built-in Validation * Application Scaffolding * Application and CRUD code generation via Bake * Access Control Lists * Data Sanitization * Security, Session, and Request Handling Components * Flexible View Caching * And More... */
Struktura CakePHP frameworka:
/app
../models -> Z modeli ločimo template od engina strani.
../controlers -> Kontrolerji nam pomagajo pri upravljanju neke sekcije na strani (blog, galerija,…)
../views -> Templati za stran, modele, itd.
../plugins -> Plugini so dodatki za CakePHP framework. Recimo naredite neko aplikacijo in jo potem date kot plugin. Plugin je ubistvu celoten site. Recimo Blog plugin ipd. Plugini imajo isto sturkturo kot tu ki jo sedaj opisujem. Primer: /app/plugins/ime_plugina/controllers …
../vendors -> Mapa kamor damo knjižnice ki niso od CakePHP frameworka. PEAR, PHPMailer,…
Za začetek naredite naslednje. V ‘app/config/routes.php’ zamenjajte vrstico:
< ?php class AppController extends Controller { var $ext = '.tpl'; var $layout = 'default'; } ?>
Z app_controller.php sistemu nastavimo default nastavitve.
$ext pomeni kakšne končnice bomo uporabljaji za template.
Z $layout spremenljivko povemo sistemu da naj uporablja default.tpl template za našo stran. To lahko spremenimo v vsakem kontrolerju z istim načinom kot tu. Tu zato definiramo da nam ni treba v vsakem kontrolerju to ponavljati.
Models
Modeli nam omogočajo da ločimo logiko (engine, ne najdem prave besede) strani od templatov. Z modeli recimo dostopamo do baze in delamo operacije na njej… Naj poudarim da cake kliče tabele v bazi v množini!! Recimo da imamo model Product v tem modelu bo cake sam od sebe klical tabelo v bazi ‘prefix_products’! ‘prefix_’ se seveda doda le v primeru če smo ga nastavili v configu. Seveda v samem modelu lahko tudi nastavimo kateri primary key se bo uporabil (po defaultu je to polje ‘id’) in katero tabelo naj cake vzame v primeru če naša tabela v bazi ni v množini.
Primer kako bi izgledal Model Product:
Model: app/models/product.php
Tabela: products
Polja: product_id (int:auto_increment), name (varchar:25), description(text), hidden(boolean)
< ?php /* app/models/product.php */ class Product extends AppModel { var $name = 'Product'; var $primaryKey = 'product_id'; // primary key } ?>
Controllers
Kontrolerji nam pomagajo da upravljamo neko sekcijo na strani. Naj nadaljujem kar z primerom Products. Imamo app/controllers/products_controller.php. Ko gremo na stran www.nasadomena.com/products/ se pokliče omenjeni kontroler in v njem index fukncija. V prve nam bo javilo napako ker še nismo naredili templata za index funkcijo. Naredi file ‘app/views/products/index.tpl’ in stem se znebimo omenjenega error-ja.
Primer:
< ?php /* app/controllers/products_controller.php */ class ProductsController extends AppController { function index() { $this->set('products', $this->Product->findAll('hidden=0', '*')); } } ?>
< ?php /* app/controllers/products_controller.php */ class ProductsController extends AppController { function index() { $this->set('products', $this->Product->findAll('hidden=0', '*')); } function view() { $this->set('product', $this->Product->find(array('hidden=0', 'product_id='.$this->params['url']['id']) , '*')); } } ?>
Kaj je $this->set() in pa $this->Product->findAll() ?
$this->set(): funkcija ki nam nastavi parametre za v template. Recimo $this->set(’test’, ‘Testni parameter’); bomo v templatu klicali kot $test.
$this->Product->findAll(): ->Product pomeni ime Modela ki ga kličemo. Uporabljamo namreč model Product! ->findAll() je predefinirana fukncija frameworka ki nam je na razpolago v vsakem Modelu ki ga naredimo. findAll() potegne podatke iz baze glede na podane parametre.
Tako kot modeli imajo tudi kontrolerji že pred definirane funkcije in spremenljivke. KLIK
Ko naredimo to funkcijo in gremo zopet na omenjeni naslov www.mojadomena.com/products/view/?id=1 nam bo javilo napako da template za view() funkcijo ne obatsaja. Naredimo ga. Naredite file ‘app/views/products/view.tpl’ in zadeva bo šla skozi.
V ‘app/views/products/index.tpl’ dodajmo naslednje:
<ul> < ?php foreach($products as $product): ?> <li><a href="view/?id=<?php echo $product['Product']['product_id'] ?>">< ?php echo $product['Product']['name'] ?></a></li> < ?php endforeach; ?> </ul>
Če view na koncu url naslova ni podam potem se po defaultu kliče funkcija index(). To lahko spremenimo in nastavimo na kaj drugega. V ‘app/config/’ direktoriju imate file routes.php in dodamo naslednjo vrstico:
V mojem primeru sem naredil v test() funkciji intreni forward na index() funkcijo:
function test() { $this->setAction('index'); }
$this->setAction() je funkcija ki naredi interni forward na eno od funkcij ki jih imamo v kontrolerju. Zelo uporabna zadeva!
Če ste opazili smo pozabili dodati IndexController. Dodajmo ga. Postpek je isti kot za ProductsController.
Naredimo file ‘app/controllers/index_controller.php’ in dodajmo naslednje v njega:
< ?php class IndexController extends AppController { function index() { $this->pageTitle = 'Naša prva stran'; } } ?>
function index() { $this->pageTitle .= '123'; }
Prva stran ki se kliče iz kontrolerja index_controller.php. Funkcija index()
< !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <link href="favicon.ico" rel="shortcut icon" type="image/x-icon" /> <p style="border: 1px dotted silver; float: left; margin-right: 20px; width: 150px"> Menu </ul> </p><p style="border: 1px solid black; float: left"> < ?php echo $content_for_layout ?></p>
Ne pozabite da mora biti ‘app/tmp’ direktorij pisljiv za web server! celoten tmp/ direktorij in pod direktoriji!
Jaz sem uporabil CakePHP iz SVN-ja. 1.2Nightly build verzijo. Delal sem na PHP 5.2.1, MySQL 5.0.24a, Apache/2.0.55
V naslednjih dneh pričakujte nadaljvenja. In sicer, pisalo se bo o naslednjih funkcionalnostih.
- Zakaj uporabiti helperje
- Uporaba HTML helperja
- Uporaba Ajax helperja
- Uporaba scaffoldinga
- …
Seveda bomo z primeri nadgradili kar smo že začeli….
iNobl: 20% [?]