Professional Documents
Culture Documents
Cakephp Framework
Cakephp Framework
CAKEPHP FRAMEWORK
1.1. Gii thiu
CakePHP l mt nn tng pht trin ng dng nhanh, m ngun m min ph s dng ngn ng lp trnh PHP. Cu trc ca n c to ra lp trnh vin to cc ng dng web. Mc tiu ch yu ca chng ti l to ra mt nn tng c cu trc, cho php bn lm vic trn cu trc mt cch nhanh chng m khng mt i s uyn chuyn. CakePHP loi b s nhm chn trong pht trin ng dng web. Chng ti cung cp cho bn cc cng c bn cn vit th bn cn: l logic c th ca ng dng. Thay v phi lm i lm li mt th khi bn bt u to mi d n (prect), bn ch cn to mt bn copy ca CakePHP v tp trung vo vic chnh ca d n. CakePHP c mt i ng pht trin v cng ng nng ng, iu ny mang li gi tr to ln cho cc d n. Ngoi vic gip bn khi phi lm i lm li mt vic no , s dng CakePHP ng ngha vi phn ct li ca ng dng ca bn c kim chng v ci tin khng ngng.
Hnh 1.
1.4. Ci t
1.4.1. Ci t
Dowload b cakePHP version 1.2 ti: http://github.com/cakephp/cakephp/archives/1.2
1.4.2. Cu hnh
c th kt ni vi database , ta phi cu hnh li file database.php trong th mc app/config nh sau :
var $default = array( 'driver' => 'mysql', 'persistent' => 'false', 'host' => 'localhost', 'port' => '', 'login' => 'account', 'password' => 'password', 'database' => 'tn database, 'schema' => '', 'prefix' => '', 'encoding' => '' );
L Vn S - Hirevietnamese
Th mc app l ni m bn lm vic: Ni y lu cc file ca ng dng do bn vit. Th mc cake l ni bn thay i cc file core ca CakePHP. Bn phi tht cn thn khi thay i cc file trong ny, v chng ti khng th gip g cho bn nu bn thay i cc file core. Th mc vendors l ni bn ci cc th vin PHP ca nh cung cp th 3 m bn cn s dng vi ng dng CakePHP ca bn.
1.5.1. Th mc App
Th mc app ca CakePHP l ni bn chnh bn pht trin ng dng. By gi chng ta s xem qua cc th mc pha trong ca th mc app. Ni lu gi mt s file cu hnh ca CakePHP. File lu thng tin kt ni n c s d liu, file bootstrap (dng np cc hm khng nm trong mt lp no c), file cu hnh CakePHP nn c lu y. Cha cc controller v cc component ca ng dng. controllers Lu cc file vn bn c s dng cho mc ch quc t ha ng locale dng. Cha cc file model, behavior v datasource ca ng dng. models Cha cc plugin. plugins Lu cc file tm ca CakePHP. D liu thc CakePHP lu ph tmp thuc vo bn cu hnh CakePHP nh th no, tuy nhin th mc ny thng c s dng lu cc m t v model, logs, v i khi l thng tin session. config Bn phi chc chn rng th mc ny tn ti v c th ghi c nu khng th hiu nng ca ng dng s b nh hng nghim trng. ch sa li (debug), CakePHP s cnh bo cho bn nu th mc ny khng tn ti hoc khng ghi c. Cc lp hoc cc th vin ca nh cung cp th 3 nn c trong th mc ny. Lm nh vy s gip cho cc file ny d dng c truy cp bng cch s dng hm App::Import('vendor', 'name'). Thot nhn qua th th mc ny c v l tha v c 1 th mc vendors khc nm ngoi. Chng ta s tm hiu s khc nhau ca cc th mc ny khi chng ta tho lun v qun l thit lp nhiu ng dng v h thng phc tp.. Cc file hin th c y: cc file element, trang thng bo
L Vn S - Hirevietnamese
vendors
views
webroot
li, cc file helper, cc file layout v cc file view. Trong mi trng tht (CakePHP c th chy mi trng development, test, production), th mc ny nn ng vai tr l th mc gc ca ng dng. Cc th mc y thng l cc th mc cho css, nh v javascript.
nh ngha lp controller KissesAndHugsController nm trong file tn l kisses_and_hugs_controller.php (Lu _controller trong tn file) nh ngha lp component MyHandyComponent nm trong file tn l my_handy.php nh ngha lp model OptionValue nm trong file option_value.php nh ngha lp behavior EspeciallyFunkableBehavior nm trong file especially_funkable.php nh ngha lp view SuperSimpleView nm trong fle super_simple.php nh ngha lp helper BestEverHelper nm trong file best_ever.php Mi file c t trong 1 th mc quy c di th mc app.
Nhng kha ngoi trong cc mi quan h hasMany,belongsTo hoc hasOne c chp nhn mc nh dng tn(s t) ca bng lin quan theo sau _id. V vy , nu mt Baker hasMany vi Cake th bng cakes s rng buc vi bng bakes theo thng qua mt kha ngoi l baker_id. i vi mt bng c tn to t nhiu t nh category_types th kha ngoi c s l category_type_id.
L Vn S - Hirevietnamese
Kt ni cc bng, c dng trong kt hp hasAndBelongsToMany gia cc model s c t tn sau theo bng model s kt ni theo th t alphabetical. Tt c cc bng m cc model ca CakePHP tng tc ti u cn mt kha chnh duy nht nhn nh mi hng. Nu bn mun m hnh ha mt bng m khng c mt kha chnh no th mt trng kha chnh n s c thm vo bng. CakePHP khng h tr to nhng kha chnh. Nu bn mun thao tc trc tip trn bng d liu, hy s dng cu truy vn trc tip hoc thm kha chnh n hot ng nh mt m hnh bnh thng.
CREATE TABLE posts_tags ( id INT(10) NOT NULL AUTO_INCREMENT, post_id INT(10) NOT NULL, tag_id INT(10) NOT NULL, PRIMARY KEY(id)); )
Thay v s dng mt m kha t ng tng l kha chnh, bn cng c th s dng char (36). Cake sau s s dng 36 k t UUID (String:: uuid) bt c khi no bn lu mt bn ghi mi bng cch s dng phng thc Model::save.
Database table: "people" Model class: "Person", ti th mc /app/models/person.php Controller class: "PeopleController", th mc /app/controllers/people_controller.php View template, ti th mc /app/views/peoples/index.ctp
L Vn S - Hirevietnamese
S dng nhng quy c , CakePHP bit rng yu cu t http://example.com/people/ c phng n gi hm index() ca Peoplecontroller, ni m model Person t ng c sn (v t ng gn vi bng people trong c s d liu), v dng file index.ctp hin th ra trnh duyt ca ngi s dng.
Ch cn vi khai bo n gin nh trn, Model Ingredient c t cho tt c nhng chc nng bn cn to cu truy vn lu v xa d liu. Chng l nhng phng thc k diu t lp Model ca CakePHP bi tnh k diu ca tnh tha k. Model Ingredient m rng ng dng Model, AppModel, c m rng t lp Model ni ti ca CakePHP. l ct li ca lp Model t cc chc nng cho Model Ingredient ca bn. To tp tin PHP cho Model ca bn trong /app/models/ hoc trong th mc con ca /app/models/ . CakePHP s tm kim n mt ni bt k trong th mc. Theo quy c n cn c cng tn vi lp. V d : ingredient.php Vi Models c nh ngha, n c th c truy cp t bn trong Controller ca bn. CakePHP t ng lm cho Model cho php truy cp khi n c tn ph hp
L Vn S - Hirevietnamese
Nu cc Model thc s khng c s rng buc ln nhau th bn c th s dng phng thc Contrller::loadModel() c c Model.
<?php class RecipesController extends AppController { function index() { $recipes = $this->Recipe->find('all'); $this->loadModel('Car'); $cars = $this->Car->find('all'); $this->set(compact('recipes', 'cars')); } } ?>
1.7.1.2. To bng c s d liu Trong khi CakePHP c th c datasources m khng phi l c s d liu iu khin , hu ht thi gian chng c . CakePHP c thit k cho thuyt bt kh tri v s lm vic vi MySQL, MSSQL, Oracle, PostgreSQL v nhng h qun tr khc. Bn c th to cc bng c s d liu nh bnh thng. Khi bn to cc lp Model th chng s t ng nh ngha cc bng m bn to. Tn bng c quy c vit bng ch thng v cc bng to bi nhiu t th c ni vi nhau bng du gch di. V d, mt Model tn l Ingredient s dnh cho bng c tn l ingredients. Mt model tn l EventRegistration s dnh cho bng c tn l event_registrations. CakePHP s kim tra xc nh dng d liu ca tng trng trong bng v s dng thng tin ny t ng ha cc tnh nng khc nhau nh trong vic xut cc trng d liu ln View.
L Vn S - Hirevietnamese
Tn cc trng ca bng c s d liu cng c quy c vit bng ch thng v ni vi nhau bng du gch di. Trong phn cn li ca phn ny bn s c thy lm th no CakePHP nh ngha c s d liu. Mi h qun tr c s d liu nh ngha loi d liu theo nhng cch khc nhau. T lp m ngun cho n h thng d liu, CakePHP v ra trn mt giao din thng nht, khng c vn m h thng c s d liu bn cn chy trn n.
Hnh 2.
Hnh 3.
1.7.1.3. Cc phng thc thng dng trong Model Find - find($type, $params);
L Vn S - Hirevietnamese
$type l trng hp d b li. Ch mt k t vit hoa (v d : All )s khng cho kt qu nh mong i. $param c dng truyn cc tham s tm kim nh :
array( 'conditions' => array('Model.field' => $thisValue), //array of conditions 'recursive' => 1, //int 'fields' => array('Model.field1', 'DISTINCT Model.field2'), //array of field names 'order' => array('Model.created', 'Model.field3 DESC'), //string or array defining order 'group' => array('Model.field'), //fields to GROUP BY 'limit' => n, //int 'page' => n, //int 'offset'=>n, //int 'callbacks' => true //other possible values are false, 'before', 'after' )
field
field(string $order=null)
$name,array
$conditions=null,
string
Tr v gi tr ca mt trng duy nht c ch nh bng bin $name t bn ghi u tin tha mn $conditions vi th t sp xp bi bin $order
$model->id = 22; echo $model->field('name'); // echo the name for row id 22 echo $model->field('name', array('created <' => date('Y-m-d H:i:s')), 'created DESC'); // echo the name of the last created instance
read() Read() l phng thc c dng thit lp m hnh d liu hin hnh. Nhng n cn c dng trong trng hp khc, l ly mt bn ghi ra t c s d liu.
function beforeDelete($cascade) { ... $rating = $this->read('rating'); // gets the rating of the record being deleted. $name = $this->read('name', $id2); // gets the name of a second record. $rating = $this->read('rating'); // gets the rating of the second record. $this->id = $id3; // $this->read(); // reads a third record $record = $this->data // stores the third record in $record ... }
Lu tr d liu CakePHP lu tr d liu rt n gin . D liu sn sng c lu s truyn qua cho phng thc save() ca lp Model s dng dng c bn sau:
L Vn S - Hirevietnamese
10
delete Xa d liu
delete(int $id = null, boolean $cascade = true);
Xa bn ghi c ch nh bi bin $id. Mc nh th xa c nhng bn ghi c lin quan ti bn ghi c ch nh. V d khi xa mt User th cc thng tin lin quan ti User cng c xa. remove
remove(int $id = null, boolean $cascade = true);
L Vn S - Hirevietnamese
11
Ging nh vi delete() v remove() , nhng deleteAll() xa tt c cc bn ghi c ch nh bi mt iu kin rng buc no . 1.7.1.4. Cc loi quan h trong Model CakePHP c 4 kiu quan h nh sau:
Hnh 4.
Cc lin kt c nh ngha bng cch to ra mt lp bin c t tn sau lin kt m bn ang nh ngha. Lp bin i khi c th l mt chui , nhng c th l mt mng a chiu xc nh c th mi lin kt. hasOne Hy thit lp mt model User vi mt mi quan h hasOne vi model Profile. Trc tin, cc bng c s d liu cua bn phi c t kha chnh xc.i vi mt mi quan h hasOne lm vic , mt trong nhng bng c cha kha ngoi n mt bng khc. Trong trng hp ny bng Profile s cha mt trng c gi l user_id. M hnh c bn l:
Hnh 5. belongsTo
Quan h hasOne
By gi chng ta c d liu Profile truy cp t model User, hy nh ngha kt hp belongsTo trong model Profile. Kt hp belongsTo l s b sung t nhin cho kt hp hasOne v hasMany: N cho php chng ta xem d liu t mt phng din khc. Khi t kha cho bng d liu i vi mi lin kt belongsTo phi theo quy c sau:
Hnh 6. hasMany
Quan h belongsTo
L Vn S - Hirevietnamese
12
Bc tip theo l nh ngha mt kt hp User hasMany Comment . Mt kt hp hasMany s cho php chng ta ly comment ca user khi chng ta ly mt bn ghi ca user . Khi t kha cho bng d liu i vi mt lin kt hasMany phi theo quy c sau:
Quan h hasMany
By gi l dng kt hp cui cng : hasAndBelongsToMany, hoc HABTM. Kt hp ny c dng khi bn c hai model cn kt ni vi nhau lin tc nhiu ln va nhiu cch khc nhau. S khc bit chnh gia hasMany v HABTM l mt lin kt gia cc model trong HABTM khng phi c quyn. Trong khi lin kt gia cc model trong hasMany th c quyn. Nu User hasMany vi Comments th mt comment ch c th lin kt ti mt user xc nh. Khi t kha cho bng d liu i vi mt lin kt hasMany phi theo quy c sau:
Hnh 8.
Quan h hasAndBelongsToMany
1.7.2. View
View l ni th hin d liu c x l ca chng ta. Mt view c xem nh mt trang template. . Lp View ca CakePHP l ni bn trnh by cho ngi dng ca bn. Nhng g biu din s c a vo cc tp tin (X)HTML v chuyn n trnh duyt. CakePHP xem cc tp tin c vit bng PHP v c phn m rng mc nh .ctp (CakePHP Template). Nhng tp tin ny cha tt c logic thng dng cn ly d liu t controller trong mt nh dng m sn sng cho cc i tng bn ang phc v. Tp tin ca View c lu trong /app/views trong mt th mc sau khi controller s dng cc tp tin, v c t tn theo cc hnh ng tng ng vi n. V d: file view ca Products controller l hnh ng view(), bnh thng s c tm thy /app/views/products/view.ctp.
L Vn S - Hirevietnamese
13
layouts: xem cc file cha cc m thng dng v c tm trong nhiu gi giao din ng dng ca bn. Hu ht cc trnh trnh by c tr bn trong mt bn mu. elements: dng thit h tr cc view ging nhau khi mt thi gian code li nhiu ln.Elements thng c tr bn trong cc view. helpers: Mt lp Helper l mt lp tin ch c dng x l cc logic trong view. Cng ging nh component ca controller, cc view c th dng chung mt hoc nhiu lp helper. Mt trong nhng lp helper ph bin l AjaxHelper, lp ny gip cho vic vit ajax trong view tr nn d dng hn.
1.7.2.1. Layout Mt Layout cha m trnh by bao quanh mt view. Bt c iu g bn mun xem trong tt c cc view u c t trong mt layout. Layout c t trong /aap/views/layouts. Layout mc nh ca CakePHP c th c ghi ln bng cch to ra mt layout mc nh mi ti /app/views/layouts/default.ctp. khi mt layout mc nh mi c c to ra. Controller chuyn n layout mc nh c ch nh. Khi to mt layout , bn cn phi bo cho CakePHP ni bn t code cho view ca bn. lm vy , chc chn ni t layout ca bn cho $content_for_layout(ni dung ca layout)v $title_for_layout(tn ca layout). Di y l mt v d v layout mc nh:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title><?php echo $title_for_layout?></title> <link rel="shortcut icon" href="favicon.ico" type="image/x-icon"> <!-- Include external files and scripts here (See HTML helper for more info.) --> <?php echo $scripts_for_layout ?> </head> <body> <!-- If you'd like some sort of menu to show up on all of your views, include it here --> <div id="header"> <div id="menu">...</div> </div> <!-- Here's where I want my views to be displayed --> <?php echo $content_for_layout ?> <!-- Add a footer to each displayed page --> <div id="footer">...</div> </body> </html>
Bin $scripts_for_layout cha bt k tp tin bn ngoi v cc bn c trong xy dng trong HTML helper. Hu ch cho c javascript v CSS
L Vn S - Hirevietnamese
14
Bn c th to nhiu layout nh bn mun: ch cn t chng trong app/views/layouts v chuyn i gia chng bn trong hnh ng iu khin ca bn bng cch s dng bin $layout , hoc hm setLayout () . V d, nu mt phn ca trang web ca ti bao gm mt khng gian qung co banner nh, ti c th to ra mt b tr mi vi khng gian qung co nh hn v ch nh n nh l cch b tr cho hnh ng ca tt c cc iu khin bng cch s dng nh:
<?php class UsersController extends AppController { function viewActive() { $this->pageTitle = 'View Active Users'; $this->layout = 'default_small_ad'; } function viewImage() { $this->layout = 'image'; //output user image } } ?>
CakePHP b tr cc tnh nng ct li (bn cnh vic b tr layout mc nh ca CakePHP) bn c th s dng trong cc ng dng ring ca bn: 'ajax' v flash '. Ba layout khc xml, js, v rss tn ti trong core cho mt cch nhanh chng v d dng phc v ln ni dung khng phi l text / html. 1.7.2.2. Cc phng thc thng dng trong View set()
set(string $var, mixed $value)
Views c hm set() tng t nh set() ca i tng controller. N cho php bn thm cc bin vo view vars. S dng set() t view cho php thm vo cc bin gi n layout v elements s c triu gi sau . S dng set() l cch chnh gi d liu t controller n view ca bn. Mt kh bn s dng set() bin c th c truy cp trong view. Trong view bn c th lm: $this->set('activeMenuButton', 'posts'); Sau trong layout bin $activeMenuButton s c sn v c gi tr posts getVar()
getVar(string $var)
ly gi tr ca viewVar vi tn l $var getVars() ly tt c danh sch cc bin c sn trong phm vi hin hnh. Tr v mt mng cc bin.
L Vn S - Hirevietnamese
15
error()
error(int $code, string $name, string $message)
hin th mt trang bo li cho ngi s dng. s dng layout/error.ctp tr li trang. $this->error(404, not found, sorry'); 'Not found', 'This page was
iu ny s lm cho mt trang bo li vi thng bo c ch nh. Quan trng ca n l bn tho thc hin khng dng li c bi View::error(). V vy bn phi ngng thc thi m ca bn nu bn mun tm dng li. element()
element(string $elementPath, array $data, bool $loadHelpers)
Chuyn n mt element hoc xem mt phn . Xem phn v element cho bit cho bit thm nhiu thng tin v v d. uuid()
uuid(string $object, mixed $url)
To ra mt DOM ID khng ngu nhin duy nht cho mt i tng, da vo loi i tng v a ch. Phng php ny thng dng bi cc helpers cn to ra DOM ID duy nht cho element chng hn nh AjaxHelper. $uuid = $this->uuid('form', array('controller' 'posts', 'action' => 'index')); //$uuid contains 'form0425fe3bad' addScript()
addScript(string $name, string $content)
=>
Thm ni dung cho cc b m bn tho ni b. B m ny c lm sn trong layout nh l $scripts_for_layout. Phng php ny hu ch khi to cc Helpers cn phi thm javascript hoc css trc tip cho layout. Hy nh rng bn tho c thm t layout hoc cc element , trong layout s khng c thm vo $scripts_for_layout. Phng php ny thng c s dng t cc Helpers bn trong, ging nh Javascript v Html Helpers. 1.7.2.3. Helper CakePHP c mt s Helpers h tr trong vic to ra cch trnh by. Chng h tr trong vic to ra khun mu p (bao gm c hnh thc), h tr trong nh dng vn bn, thi gian v s, v thm ch c th tng tc chc nng Ajax. Di y l tm tt nhng Helpers. Helpers ca cakePHP Ajax M t c s dng cng vi th vin Prototype JavaScript to chc nng Ajax trong trnh by. Cha shortcut cho cc phng php ko / th, hnh thc ajax & lin kt, v nhiu hn na.
L Vn S - Hirevietnamese
16
c s dng bi li xem ni dung cache. To ra cc hnh thc HTML Form ,cc element cng ni v x l cc vn xc nhn. Html Thun tin cho vic to cc phng php nh du cng nh cc thnh lp. Hnh nh, lin kt, bng biu, cc th tiu v nhiu hn na. Javascript c s dng thot khi cc gi tr s dng trong JavaScripts, vit ra d liu cho cc i tng JSON, v khi m nh dng s v nh dng tin t. Chia trang d liu v phn loi Phng php tin li cho xut d liu XML. Truy cp vit ra cc gi tr phin lm vic trong view Lin kt mt cch mnh m,lm ni bt, ct b t mt cch thng minh. Tm ra nm tip theo ,nh dng p (Hm nay, 10:30) v chuyn i vng thi gian Phng php tin li cho vic to tiu XML v cc element
Javascript
Vi cc bn tng lm vic vi Cakephp hn cc bn khng l g vic s dng cc hepler trong cake nh form, html, javascript. Sau y ti xin lit k mt s hm hay s dng nht trong cakephp, cu trc v cch s dng chng. $javascript->link($url, $inline); $url (require): ng dn ti file javascript. Cc file javascript s c t trong th mc app/webroot/js. Mc nh url l ng dn ti th mc app/webroot/js/. $inline: (boolean) . Nu gi tr l true, th th script s c in trong th header , nu l false th s in trong $script_for_layout. Gi tr mc inh l true. V d:
<?php echo $javascript->link('script.js', true); ?> //D liu tr v html <script type="text/javascript" src="/test/js/script.js"></script>
L Vn S - Hirevietnamese
17
$html->css(mixed $path, string $rel = null, array $htmlAttributes = array(), boolean $inline = true); To mt link ti file css. Nu $inline c gn l false, th th css s c t bn trong bin $script_for_layout, cn l true th t trong th header. Mc nh ng dn trong ca file css l /app/webroot/css/. V d:
<?php echo $html->css('forms'); ?> //D liu tr v html <link rel="stylesheet" type="text/css" href="/test/css/forms.css" /> //Ta cng c th khai bo nhiu file css cng mt lc <?php echo $html->css(array('forms','tables','menu')); ?> //D liu tr v html <link rel="stylesheet" type="text/css" href="/test/css/forms.css" /> <link rel="stylesheet" type="text/css" href="/test/css/tables.css" /> <link rel="stylesheet" type="text/css" href="/test/css/menu.css" />
$html->link(string $title, mixed $url = null, array $htmlAttributes = array(), string $confirmMessage = false,boolean $escapeTitle = true); To ra mt th html link. Cc tham s truyn vo l $title: Nhn ca ng link. $url: ng dn ca link lin kt. $htmlAttributes: cc thuc tnh html ca th link. $confirmMessage: Thng bo khi kch vo link. Mc nh gi tr l false. V d:
<?php echo $html>link('Enter', '/pages/home', array('class'=>'button')); ?> //D liu tr v HTML <a href="/pages/home" class="button">Enter</a> <?php echo $html>link('Delete', array('controller'=>'recipes', 'action'=>'delete', 6), arra y(), "Are you sure you wish to delete this recipe?");?> //D liu tr v html <a href="/recipes/delete/6" onclick="return confirm('Are you sure you wi sh to delete this recipe?');">Delete</a> //Chui query cng c th to ra t mt th link() <?php echo $html>link('View image', array('controller' => 'images', 'action' => 'view', 1, '?' => array( 'height' => 400, 'width' => 500))); ?> //D liu tr v html
L Vn S - Hirevietnamese
18
$html->url($path); V d:
//Gi s ta ang trong project test <?php echo $html->url('cake.jpg'); ?> //D liu tr v html '/test/cake.jpg' <?php echo $html->url('/file.txt'); ?> //D liu tr v html /test/file.txt
$form->create(string $model = null, array $options = array()); Tt c cc tham s c th l ty chn. Nu khng c tham s truyn vo, th mc nh phng thc l POST, v controller v action no gi ra view cha form ny th khi submit th form s chuyn d liu v controller v action y. V d:
//ta to ra mt form trong action c tn l add <?php echo $form->create('Recipe'); ?> //D liu tr v html: <form id="RecipeAddForm" method="post" action="/recipes/add">
Cc tham s truyn vo: $model: tn model dng khi to form y. $option: Cc thuc tnh khai bo thm cho form y bao gm $options['type']: Ch nh cc phng thc truyn d liu. Gi tr hp l bao gm post, get, file, put v delete. V d:
<?php echo $form->create('User', array('type' => 'get')); ?> //D liu tr v html <form id="UserAddForm" method="get" action="/users/add"> <?php echo $form->create('User', array('type' => 'file')); ?> //D liu tr v html <form id="UserAddForm" enctype="multipart/formdata" method="post" action="/users/add">
options['url']: Ch nh ng dn khi form truyn d liu. Gi tr url c th truyn vo mt chui hay mt mng. V d:
<?php echo $form->create(null, array('url' => '/recipes/add')); ?> // hoc <?php echo $form>create(null, array('url' => array('controller' => 'recipes', 'action' => ' add'))); ?> //D liu tr v html: <form method="post" action="/recipes/add">
L Vn S - Hirevietnamese
19
<?php echo $form>create(null, array('url' => 'http://www.google.com/search', 'type' => 'get ')); ?> //D liu tr v html: <form method="get" action="http://www.google.com/search">
options['action']: Cho php ch nh mt action bt k trong controller hin ti. Gi s bn mun truyn d liu ti form login trong controller hin ti, bn c th khai bo nh sau:
<?php echo $form->create('User', array('action' => 'login')); ?> //D liu tr v html: <form id="UserLoginForm" method="post" action="/users/login"> </form>
1.7.3. Controller
1.7.3.1. Gii thiu Mt controller (iu khin) c s dng qun l v mt logic ca mt phn trong ng dng ca bn. Hu ht, cc controller c s dng qun l mt model (m hnh) n gin. V d, nu bn xy dng mt trang web cho mt hiu bnh trc tuyn, bn cn phi c RecipesController v IngredientsController qun l cng thc v thnh phn. Trong CakePHP, nhng controller c t tn nh l ca model nhng dng s nhiu. Model Recipe c iu khin bi RecipesController, model Product c iu khin bi ProductsController v.v Nhng lp controller trong ng dng ca bn c k tha t lp CakePHP AppController. N c k tha t lp nhn Controller, mt phn ca th vin CakePHP. Lp AppController c nh ngha trong th mc app/app_controller.php v n cha nhiu phng thc c chia s gia tt c cc controller trong ng dng ca bn.
L Vn S - Hirevietnamese
20
Controller c th thm vo nhiu phng thc m chng thng ch dn n cc action (hnh ng). Action l mt phng thc iu khin s dng hin th views (xem). Mt action n gin ch l mt phng thc ca controller. CakePHP l ngi vn chuyn gi cc action khi chng nm trong URL yu cu n action ca controller (tham chiu n Route Configuration bit cch thc gn cc tham s tn action ca controller trong URL). Quay li vi v d hiu bnh online ca chng ta, RecipesController c th cha cc phng thc (hay action) view(), share(), v search(). Controller s tm thy chng trong /app/controllers/recipes_controller.php anh c ni dung:
<?php # /app/controllers/recipes_controller.php class RecipesController extends AppController { function view($id) { //action logic goes here.. } function share($customer_id, $recipe_id) { //action logic goes here.. } function search($query) { //action logic goes here.. } } ?>
1.7.3.2. App Controller Nh gii thiu, lp AppController l lp cha ca tt c cc controller trong ng dng ca bn. Chnh lp AppController cng c kt tha t lp Controller cha trong th vin nhn ca CakePhp. AppController c nh ngha trong /app/app_controller.php nh sau:
<?php class AppController extends Controller { } ?>
Cc thuc tnh v phng thc c to trong AppController s c gi tr trn tt c cc controller trong ng dng ca bn. l tng to ra code (m chng trnh), ci m c s dng chung trong tt c cc controller. Components (s cp n sau) l m chng trnh tt nht c s dng nhiu controller (khng nht thit phi l tt c). Thng thng cc lut k tha t cc i tng c p dng, CakePHP cng to ra mt dy ph lm vic khi chng mang theo nhng thuc tnh c bit, ging nh danh sch cc component hoc helper c controller s dng. Trong trng hp ny, mng gi tr AppController c ni vi cc mng ca lp con. CakePHP ni nhng bin trong AppController vi cc mng trong controller ca ng dng
L Vn S - Hirevietnamese
21
Nh rng thm cc helper Html v Form cn nh ngha $helpers trong AppController. Cng lu rng gi li AppController trong controller con t c kt qu tt nht:
function beforeFilter(){ parent::beforeFilter(); }
1.7.3.3. Page Controller Nhn CakePHP c cha controller mc nh c gi l Pages Controller (cake/libs/controller/pages_controller.php). Trong chnh ch bn c th thy sau khi ci t CakePHP c pht ra nh s dng controller ny. N thng s dng to ra nhng trang tnh. V d nu bn to mt tp tin view /views/pages/about_us.ctp, khi cc bn c th truy cp http://l2qs.ttct/pages/about_us. Khi cc bn bake mt ng dng s dng console (iu khin dng lnh) ca CakePHP th pages controller s c sao chp t ng vo th mc app/controllers/ v nu cn bn c th sa i n. Hoc l bn c th sao chp t nhn ca ng dng.
1.7.3.4. Nhng thuc tnh Controller (attributes) Xin gii thiu mt s thuc tnh c bn ca lp Controller, cc bn c th tham kho y http://api.cakephp.org/class/controller. $name Ngi dng PHP4 nn bt u nh ngha controller bng cch s dng thuc tnh $name. Thuc tnh $name t tn cho controller. Thng thng, tn ch l s nhiu ca tn model c s dng.
<?php # $name controller attribute usage example
$components, $helpers v $uses Tip n, mt trong nhng thuc tnh c CakePHP s dng nhiu l helpers, components, v models. Bn s s dng chng chung vi controller hin ti. S dng nhng thuc tnh ny l lm cho cc lp MVC a ra bi $components v $uses c hiu lc trong lp controller v cc bin trong lp (v d: $this>ModelName) v $helpers cho lp view nh mt bin tham chiu i tng ($helpername)
L Vn S - Hirevietnamese
22
Mc nh, cc controller truy xut n model chnh ca chng. RecipesController s c model Recipe v tn ti $this->Recipe, v ProcductsController cng vy c model Product v $this->Product. Tuy nhin, khi bn cho php controller truy xut n cc model b tr th s dng bin $uses, tn ca controller hin hnh cng phi thm vo. Xem v d minh ha di. Cc helper Html, Form, v Session lun lun c. Nhng nu bn chn nh ngha mng $helpers trong AppController, th phi thm Html v Form nt bn mun n c hiu lc trong controller. Chng ta s bn k vn ny phn tip theo. V d v controller ca CakePHP thm cc lp MVC.
<?php class RecipesController extends AppController { var $name = 'Recipes'; var $uses = array('Recipe', 'User'); var $helpers = array('Ajax'); var $components = array('Email'); } ?>
Mi bin trn c st nhp vi cc gi tr c kt tha, bi vy i lc n khng cn thit v d khai bo li helper Form hoc nhng th khai bo trong controller App ca bn, Nu bn khng mun s dng Model trong contrller ca bn th gn $uses = array(). Chng s cho php bn s dng mt controller m khng cn c model ng tn. $layout v $page Trong cc controller ca CakePHP c mt s thuc tnh iu khin cch b tr (layout) trang web. Thuc tnh $layout c th c gn bng tn ca mt layout c lu tr trong /app/views/layouts. Bn c th ch r mt layout bng cch gn bng tn layout b i .ctp. Nu bn khng nh ngha, th mc nh n s ly /app/views/layouts/default.ctp vn c sn trong CakePHP.
<?php // Using $layout to define an alternate layout
Bn cng c th thay i ta (title) ca trang web (ci dng ch nm gc phi trn ca trnh duyt) bng cch s dng $pageTite. V ng qun thm bin $title_for_layout, t nht l nm gia th <title> v th </title> u ca on m HTML.
<?php
L Vn S - Hirevietnamese
23
//
class RecipesController extends AppController { function quickSave() { $this->pageTitle = 'My search engine optimized title'; } } ?>
Bn cng c th thit t t ca trang bng cch s dng $this->pageTitle (phi thm $this->part). Bn nn lm nh vy vic phn cch trang web mt cch logic t layout v ni dung. Vi nhng web tnh bn nn s dng $this->pageTitle trong view nu bn mun c title khc. Nu khng c thit t th CakePHP s t ng to ra t tn controller v tn ca view. $params Cc tham s controller s nm trong $this->params trong trang controller ca CakePHP. Thuc tnh ny s cung cp truy cp thng tin ca yu cu hin ti. Hu ht vic s dng $this->params l truy cp thng tin t controller thng qua POST v GET. $this->params['form']: lu tr d liu POST t form c lu tr. Thng tin km theo cng c cha trong $_FILES. $this->params['admin']: c t bng 1 nu hot ng hin ti thng qua admin routing. $this->params['bare']: lu tr 1 nu layout hin ti trng, 0 nu ngc li. $this->params['isAjax']: lu tr 1 nu Ajax c gi. Bin ny c thit t khi RequestHandler Component c s dng trong controller. $this->params['controller']: lu tr tn controller hin ti trong yu cu (request). V d nu URL /posts/view/1 c yu cu th $this->params['controller'] l "posts". $this->params['action']: lu tr tn ca action hin ti cha trong yu cu. V d nu yu cu URL /posts/view/1 was requested th $this->params['action'] cha "view". $this->params['pass']: tr v mt mng (nh ch s bng s)cc tham s sau action.
// URL: /posts/view/12/print/narrow Array ( [0] => 12 [1] => print [2] => narrow )
$this->params['url']: lu tr URL hin ti, cha cp kha-gi tr. V d URL /posts/view/?var1=3&var2=4 c gi, $this->params['url'] s cha:
[url] => Array ( [url] => posts/view
L Vn S - Hirevietnamese
24
c dch ra view:
<input name="data[User][first_name]" value="" type="text" />
$this->params['prefix']: thiu t tin t ca routing. V d gi tr l "admin" vi cc yu cu /admin/posts/someaction. $this->params['named']: lu tr cc tham s trong URL dng /key:value/. V d URL/posts/view/var1:3/var2:4 th $this->params['named'] l mng nh sau:
[named] => Array ( [var1] => 3 [var2] => 4 )
persistModel S dng to nhng cc nh (cache) nhng th hin ca model ca controller s dng. Khi t l true, tt c cc model c lin quan n controller s c lu tr. N tng thm hiu qu trong nhiu trng hp. Cn rt nhiu thuc tnh khc. 1.7.3.5. Nhng phng thc Controller (methods) Tng tc vi View set(string $var, mixed $value) : y l phng thc chnh c th truyn gi tr bin t Controller ra View.
<?php //First you pass data from the controller: $this->set('color', 'pink'); //Then, in the view, you can utilize the data: ?> You have selected <?php echo $color; ?> icing for the cake.
Phng thc set() cng cho php chng ta truyn mng ra view. iu ny thun tin khi a ra mt t hp thng tin. render(string $action, string $layout, string $file) : mi ln yu cu mt action ca controller, sau khi thc hin xong cc thao tc, th phng thc ny c gi mt cch t ng. Phng thc ny thc hin tt c cc view (s dng d liu c a ra trong hm set()), thay ch cc view vo trong cc layout v th hin ra giao din ngi dng.
L Vn S - Hirevietnamese
25
Theo quy c, cc tp tin xem mc nh s c a ra. Nu action search() ca RecipesController c yu cu, th tp tin view /app/views/recipes/search.ctp s c a ra.
class RecipesController extends AppController { ... function search() { // Render the view in /views/recipes/search.ctp $this->render(); } ... }
Mc d CakePHP t ng gi phng thc render() (tr khi thit t $this>autoRender l false) th sau mi trnh t hot ng, bn c th s dng n ch nh mt tp tin khc bng cch ch ra tn ca action trong controller no nh vo s dng tham bin $action. Nu $action bt u bng / n s ly mt view hoc element trong th mc /app/views.
// Render the element in /views/elements/ajaxreturn.ctp $this->render('/elements/ajaxreturn');
Bn cng c th ch nh tp tin view hoc element nh vo tham s $file. Khi s dng $file, ch ci t mt vi hng s ca CakePHP. Tham s $layout cho php bn ch c layout cho view c a ra. Flow Control redirect(string $url, integer $status, boolean $exit): l phng thc thng c s dng nht. Phng thc cha tham bin u tin l nh dng URL ca CakePHP. Phng thc chuyn hng view sang mt view khc.
function placeOrder() { //Logic for finalizing order goes here if($success) { $this->redirect(array('controller' 'thanks')); } else { $this->redirect(array('controller' 'confirm')); } }
=> =>
'orders', 'orders',
'action' 'action'
=> =>
Tham s th hai cho php bn nh ngha mt m trng thi (status) ca HTTP iu hng. Bn c th s dng 301 (chuyn mi mi), 303 (xem khc), hoc chuyn hng mt cch t nhin. Phng thc s gp exit() sau khi chuyn hng, tr khi tham s th 3 l false. Bn c th iu hng n mt trang lin k:
$this->redirect($this->referer());
L Vn S - Hirevietnamese
26
$this->redirect($this->referer()); Nu s dng mt tin t iu hng v bn mun iu hng b qua tin t th bn thit lp tham s th ba l null, false s khng hiu qu. V d di iu hng v trang admin, b tin t.
$this->redirect(array('controller' 'admin' => null)); => 'orders', 'action' => 'add',
flash(string $message, string $url, integer $pause): ging nh direct() phng thc flash thng s dng chuyn ngi dng sang trang mi. N khc ch n s hin thng bo trc khi chuyn ti mt URL khc. Tham s u tin l thng ip c th hin, th hai l ng dn theo chun CakePHP, tham s th ba l s giy s dng trc khi chuyn hng. C th dng phng thc setFlash() thc hin to thng ip . Callbacks Cc controller ca CakePHP s chn v gi trc hoc sau khi action controller c nu ra. beforeFilter() : Hm ny s thc thi trc khi mi action ca controller thc thi. This function is executed before every action in the controller. y l ni thun li kim tra cc hot ng ca ngi dng. beforeRender() : c gi sau khi action c gi nhng trc khi view c nu ra. Ci ny khng hay dng nh cn nu bn gi render() c khi kt thc mt action. afterFilter() : c gi sau khi action controller v sau khi goi view hon thnh. y l phng thc cui cng controller c gi. Cc phng thc hu ch khc constructClasses : phng thc s gi cc model c yu cu bi controller. Qu trnh gi c thc hin bng chun CakePHP, nhng phng php ny l tin dng c khi truy cp vo b iu khin t gc khc nhau. Nu bn cn CakePHP trong mt kch bn dng lnh hoc s dng t bn ngoi, constructClasses () c th c ch. paginate : Cho php bn to ra mt trang theo m hnh c sn, h tr nh s trang requestAction(string $url, array $options) : hm ny gi mt action ca controller t cc v tr khc nhau v nhn kt qu t action . $url theo nh dng URL ca CakePHP. c thm d liu nhn t action s dng mng $options.
L Vn S - Hirevietnamese