|
ÀÁÐÀÊÀÄÀÁÐÀ (Òîæå ñàìîå íî â ÷èòàåìîì âèäå)
Ítjlyjrhfnyj z cnfkrbdfkcz c vytybtv, xnj d vfyefkt gj Zend Framework
jxtym vfkj nenjhbfkjd, nj tcnm d ytv [jhjij jgbcfys jnltkmyst rkfccs,
yj nz;tkj hfpj,hfnmcz rfr b[ bcgjkmpjdfnm dvtcnt. Ñtqxfc z gjgsnf.cm
djcgjkybnm 'njn ytljcnfnjr. Ñnfnmz ghtlyfpyfxtyf lkz yfxbyf.otuj b
chtlytuj ehjdyz. Ïjckt ghjxntybz ds cvj;tnt cjplfdfnm ghjcnst cfqns yf
,fpt Zend Framework. Â rjywt ds cvj;tnt crfxfnm
gjkyjwtyysq hf,jxbq rjl vbyb cfqnf - ghbvthf, hfphf,jnfyyjuj cgtwbfkmyj
gjl cnfnm.. Êjl ,sk ghjntcnbhjdfy yf Zend Framework 1.5.2, php 5.2.0,
mysql 5.0, apache 1.3
 cfqnt htfkbpjdfyj:
- Ïfnnthy MVC - yf jcyjdt Zend_Controller, Zend_View, Zend_Layout b Zend_Db
- Óghfdktybt rjyabuehfwbjyysvb afqkfvb - Zend_Config
- Ðf,jnf c ,fpjq lfyys[ - Zend_Db, Zend_Db_Select, Zend_Db_Table
- Înltktybt ghtlcnfdktybz (dblf) c gjvjom. cbcntvs if,kjyjd - Zend_View
- Äde['nfgyjt ghtlcnfdktybt - Zend_Layout
- Óghfdktybt vfhihenfvb - Zend_Controller_Router_Rewrite
- Àdnjvfnbxtcrfz pfuheprf rkfccjd - Zend_Loader
- Ðf,jnf c bcrk.xtybzvb b j,hf,jnxbr jib,jr
Ñnfhn
Äkz gjkextybz ,fpjds[ yfdsrjd ghjxnbnt ghtlsleoe. cnfnm..
Òfv vs hfcgjkfufkb php afqks dyt document root lbhtrnjhbb, yj exbnsdfz,
xnj yfib [jcnths xfcnj yt lf.n nfrjq djpvj;yjcnb, ntgth vs ,eltv
hfcgjkfufnm dct afqks dyenhb document root.
Ènfr, crfxbdftv gjcktly.. cnf,bkmye. dthcb. ahtqvdjhrf, hfpfh[bdbhetv b
ds,bhftv rkfccs lkz hf,jns. Ïjxnb dct rkfccs Zend Framework vj;yj
bcgjkmpjdfnm ytpfdbcbvj, gj'njve ds,thtv njkmrj ye;yst. Âjn nfr
dsukzlbn yfi cgbcjr afqkjd b gfgjr ,b,kbjntrb Zend:
Ðbc. 1. Ôfqkjdfz cnhernehf Zend Framework
À djn nfr dsukzlbn lthtdj gfgjr cfqnf:
Ðbc. 2. Äthtdj gfgjr cfqnf
Âj vyjujv cnhernehf jcnfkfcm nfrfz ;t rfr d ghjikjq cnfnmt. Âct
yfpdfybz gfgjr gjkyjcnm. cjjndtncnde.n afqkfv, xnj kt;fn d yb[,
gj'njve, rjvvtynbhjdfnm b[ yt ,ele. Învtxe njkmrj xnj d gfgre system z
rkfle cbcntvyst afqks, rjnjhst nhelyj jnytcnb r rfrjq-kb,j xfcnb MVC.
Äkz kexituj gjybvfybz ds vj;tnt chfpe crfxfnm rjl, cvjnhtnm b chfdybdfnm. Êhjvt njuj rjl j,bkmyj jnrjvvtynbhjdfy.
Î,obq fkujhbnv hf,jns cfqnf
Äkz j,otuj gjybvfybz z c[tvfnbxtcrb bpj,hfpbk fkujhbnv hf,jns cfqnf.
Ðbc. 3. Àkujhbnv hf,jns cfqnf
Êfr b hfytt c gjvjom. afqkf .htaccess dct pfghjcs r cfqne gthtyfghfdkz.ncz yf d[jlye. njxre - afqk index.php kt;fobq d rjhyt document root.
RewriteEngine on
RewriteBase /
RewriteCond %{SCRIPT_FILENAME} !-f RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1
Ít gthtyfghfdkz.ncz njkmrj pfghjcs yf htfkmyj ceotcnde.obt afqks,
gj'njve dj bp,t;fybt ytghbznys[ cbnefwbq chfpe pfrhsdftv ljcneg d gfgre
applications ult hfcgjkj;tys php afqks. Äkz 'njuj rkfltv nelf .htaccess
pfghtof.obq ljcneg r k.,sv afqkfv.
Ðfccvjnhbv rjl afqkf index.php
<?php
require 'applications/settings/config.php';
$paths = implode(PATH_SEPARATOR, array ( $config['path']['libs'], $config['path']['models'], $config['path']['system'] ));
set_include_path($paths);
require 'Kernel.php';
Kernel::run($config);
Òfr rfr vs yt [jnbv rf;lsq hfp erfpsdfnm gjkysq genm r ye;ysv afqkfv - pflftv set_include_path. Ïjlrk.xftvst afqks 'nj ,b,kbjntrb Zend, cbcntvyst rkfccs, f nfr;t rkfccs vjltkb. index.php pfgecrftn Kernel::run() - jcyjdyjq vtnjl yfituj "zlhtyjuj" rkfccf Kernel.php. Ýnjn rkfcc ghtlyfpyfxty lkz bybwbfkbpfwbb b yfcnhjqrb jrhe;tybz.
public static function run($config) {
try {
Zend_Loader::registerAutoload(); $cnf = new Zend_Config($config); Zend_Registry::set('cnf', $cnf); self::setDbAdapter();
if (file_exists($cnf->path->system.'routes.php')) { require($cnf->path->system.'routes.php'); } Zend_Layout::startMvc(array( 'layoutPath' => $cnf->path->layouts, 'layout' => 'index', )); $layout = Zend_Layout::getMvcInstance();
$view = $layout->getView();
$layout->setViewSuffix('tpl');
$view->baseUrl = $cnf->url->base;
$view->setBasePath($cnf->path->views); $layout->setView($view);
$viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer(); $viewRenderer->setView($view) ->setViewSuffix('tpl');
Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);
$front = Zend_Controller_Front::getInstance();
$front->setBaseUrl($cnf->url->base) ->setRouter($router);
Zend_Controller_Front::run($cnf->path->controllers);
} catch (Exception $e) { Error::catchException($e); } }
Ïhfrnbxtcrb rf;lfz cnhjxrf jnrjvvtynbhjdfyf b e;t ctqxfc ds vj;tnt gjkyjcnm. ghtlcnfdbnm ct,t c[tve hf,jns cfqnf-ghbvthf.
Äfktt, ghtlgjkj;bv vs j,hfnbkbcm r cktle.otq cnhfybwt yfituj cfqnf http://ilovezf/pages/1/ Â 'njv ckexft ,eltn dspdfy IndexController b tuj ltqcndbt PageAction. (Òfrjt gjdtltybt ghjbc[jlbn gjnjve xnj z lj,fdbk cgtwbfkmyjt ghfdbkj d afqk vfhihenjd routes.php, gj evjkxfyb. gj nfrjve pfghjce dspjdtncz rjynhjkkth PagesController b ltqcndbt 1, rjytxyj tckb jyb ceotcnde.n)
 rjynhjkktht ghjbc[jlbn gjlrk.xtybt vjltkb b gjkextybt lfyys[
ytj,[jlbvs[ pfghjityyjq cnhfybwt. Çfntv ghjbc[jlbn jghtltktybt
gthtvtyys[ lkz dblf.
Ífrjytw d ukfdysq vfrtn applications/views/scripts/index.tpl gjlcnfdkz.ncz ye;yst yfv lfyyst b dtcm gjkextyysq htpekmnfn jnghfdkztncz d ,hfepth.
Äfktt z ,jktt gjlhj,yj jcnfyjdk.cm yf rk.xtds[ vjvtynf[ gjcnhjtybz yfituj ghbkj;tybz.
Zend_Loader
Ýnjn rkfcc gjpdjkztn bcgjkmpjdfnm jlye bp pfvtxfntkmys[ djpvj;yjcntq php5 - fdnjvfnbxtcre. pfuhepre j,]trnjd, byfxt yfpsdftve. autoload.
Åckb ds gbibnt ÎÎÏ ghbkj;tybt nj e dfc, ljk;yj ,snm, yt jlby ltcznjr
hfpkbxys[ rkfccjd, b yf ytrjnjhs[ cnhfybwf[ ye;yj gjlrk.xbnm 5-10
rkfccjd. Åckb nfrb[ cnhfybw vyjuj, nj 'nj jxtym ytghbznyj. Ñ
Zend_Loader dfv ljcnfnjxyj dctuj kbim erfpfnm yfpdfybt rkfccf d ye;yjv
ajhvfnt, b jy cfv ghjbpdtltn gjlrk.xtybt.
Òj tcnm, d rjlt yfghbvth gbitv
$news = new Text_News_Home();
Ñbvdjk "_" bcgjkmpetncz rfr hfpltkbntkm, Zend_Loader ,eltn gsnfnmcz yfqnb erfpfyysq rkfcc gj flhtce Text/News/Home.php.
(Â hfccvfnhbdftvjv ghbvtht d index.php z erfpfk jnyjcbntkmyj rfrb[ lbhtrnjhbq ,eltn ghjbc[jlbnm gjbcr)
Äkz fdnjvfnbxtcrjq pfuheprb vj;yj bcgjkmpjdfnm vtnjl Zend_Loader::loadClass() yj z htrjvtyle. dsgjkyznm Zend_Loader::registerAutoload(); xnj ,s yt gbcfnm rf;lsq hfp Zend_Loader::loadClass(). Ïhfdlf registerAutoload() nht,etn yfkbxbt vjlekz spl_autoload.
Zend_Registry
Êkfcc htfkbpetn gfnnthy singleton
b nfrbv j,hfpjv gjpdjkztn yfv j,hfofnmcz r ye;ysv j,]trnfv bp k.,juj
vtcnf rjlf. Ýnj fkmnthyfnbdf bcgjkmpjdfyb. ukj,fkmys[ gthtvtyys[. Êkfcc
jgthbhetn ytrbv httcnhjv, d rjnjhsq pfyjczncz j,]trns. Êk.xtdst vtnjls
rkfccf 'nj get b set,
rjnjhst pfyjczn b gjkexf.n j,]trns d httcnh cjjndtncndtyyj. Â
cfqnt-ghbvtht d httcnh pfyjczncz j,]trns cjtlbytybz c ÁÄ b j,]trn
rjyabuehfwbb. Òfr;t df;ty vtnjl isRegistery ghjdthz.obq ceotcndjdfybt j,]trnf d httcnht.
Zend_Config
Êkfcc gjpdjkztn d ÎÎÏ cnbkt hf,jnfnm c rjyabuehfwbjyysvb afqkfvb.
Ïjllth;bdf.ncz rjyabuehfwbjyyst afqks hfpkbxyjuj ajhvfnf: php-vfccbd,
ini - afqk, xml - afqk. Äkz hfccvfnhbdftvjuj ghbvthf z ds,hfk cfvsq
ghjcnjq dfhbfyn - [hfybnm yfcnhjqrb d php vfccbdt. Âs vj;tnt
bcgjkmpjdfnm k.,jq. Â j,]trnt Zend_Config dct lfyyst ghtlcnfdktys d
dblt fccjwbfnbdyjuj vfccbdf. Ífghbvth nfrbv j,hfpjv:
$cnf->path->system
gjkexftv pyfxtybz abpbxtcrjuj genb gfgrb c cbcntvysvb afqkfvb.
Ífghbvth djn nfr vj;tn dsukzltnm dfi rjyabuehfwbjyysq afqk:
<?php $config = array ( 'db' => array ( 'adapter' => 'PDO_MYSQL', 'params' => array( 'host' => 'localhost', 'username' => 'root', 'password' => 'xxxx', 'dbname' => 'ilovezf', 'driver_options'=> array(PDO::ATTR_EMULATE_PREPARES => true), 'profiler' => false, ), ), );
Óghfdktybt vfhihenfvb Zend_Controller_Router_RewriteÌfhihenbpfwbz
- 'nj ghjwtcc ghbyznbz URI (njq xfcnb URI, rjnjhfz bltn gjckt ,fpjdjuj
URL) b tt hfpkj;tybz yf xfcnb lkz jghtltktybz njuj, rfrjq rjynhjkkth b
rfrjt ltqcndbt 'njuj rjynhjkkthf ljk;ys gjkexbnm pfghjc b dsgjkybnmcz.
Ñ gjvjom. Zend_Controller_Router_Rewrite vj;yj pflfdfnm hfpkbxyst
ghfdbkf vfhihenbpfwbb. <?php
$router = new Zend_Controller_Router_Rewrite();
$router->addRoute('articles', new Zend_Controller_Router_Route('articles/:articleId', array('module' => 'default', 'controller' => 'articles', 'action' => 'view')) );
$router->addRoute('pages', new Zend_Controller_Router_Route('pages/:pageId', array('module' => 'default', 'controller' => 'index', 'action' => 'page')) );
Ñ gjvjom. erfpfyys[ ghfdbk vs lj,bdftvcz yfghbvth njuj xnj gj pfghjce http://ilovezf/articles/1/ ,eltn dspdfy rjynhjkkth articlesController b ltqcndbt viewAction, rhjvt njuj pyfxtybt bltynbabrfnjhf cnfnmb (d erfpfyyjv pfghjct 'nj 1) ,eltn ljcnegyj gj gfhfvtnhe articleId.
Êhjvt Zend_Controller_Router_Route rjnjhsq bcgjkmpetncz lkz
lbyfvbxtcrb[ vfhihenjd, tcnm tot Zend_Controller_Router_Route_Static
lkz gjcnjzyys[ ytbpvtyys[ vfhihenjd, yfghbvth lkz URL nbgf
http://ilovezf/exit/.
Òfr;t ceotcndetn Zend_Controller_Router_Route_Regex jcyjdfyysq yf
htuekzhys[ dshf;tybz[, 'nj cfvsq ub,rbq cgjcj, jghtltktybz vfhihenjd.
Front rjynhjkkthZend_Controller_Front htfkbpetn
gfnnthy Front Controller, bcgjkmpetvsq d ghbkj;tybz[ MVC. Åuj
yfpyfxtybt cjcnjbn d bybwbfkbpfwbb jrhe;tybz pfghjcf, ghjkj;tybb
vfhihenf ghb[jlzotuj pfghjcf b gjcktle.otv pfgecrt dszdktyys[ ltqcndbq.
Îy fuhtubhetn dct jndtns b djpdhfoftn b[ gj pfdthitybb ghjwtccf. $front = Zend_Controller_Front::getInstance();
$front->setBaseUrl($cnf->url->base) ->setRouter($router);
Zend_Controller_Front::run($cnf->path->controllers);
Ðf,jnf c bcrk.xtybzvb b j,hf,jnxbr jib,jr
Zend Framework ghtlkfuftn ytcrjkmrj dfhbfynjd hf,jns c bcrk.xtybzvb. Âj
gthds[ 'nj gkfuby Zend_Controller_Plugins_ErrorHandler, jy lftn
djpvj;yjcnm gtht[dfnsdfnm bcrk.xtybz dspdfyyst jncencndbtv rjynhjkkthf
bkb ltqcndbz, rhjvt njuj jy gtht[dfnsdftn bcrk.xtybz ds,hjityyst d
rjynhjkkthf[. Íbrfrbt lheubt bcrk.xtybz, yfghbvth bcrk.xtybz
vfhihenbpfwbb, bkb bcrk.xtybz ds,hjityyst d lheub[ gkfubyf[ jy yt
gtht[dfnsdftn. Ýnjn gkfuby [jhji bvtyyj lkz hf,jns c jib,rfvb nbgf 404,
jy gjpdjkztn d hfvrf[ j,otq cnhernehs vfrtnjd jnj,hfpbnm cnhfybwe 404 c
ytj,[jlbvsvb cjj,otybzvb. Çf gkfuby jndtxftn rjynhjkkth ErrorController b ltqcndbt errorAction.
Äkz njuj ;t xnj ,s dct nfrb j,hf,fnsdfnm jcnfkmyst jib,rb d hfccvfnhbdftvjv ghbvtht bcgjkmpetncz tot jlby j,hf,jnxbr jib,jr /applications/system/Error.php.
<?php
class Error {
public static function catchException(Exception $exception) {
$message = $exception->getMessage(); $trace = $exception->getTraceAsString(); $str = 'ERROR: ' . $message . "n" . $trace;
$cnf = Zend_Registry::get('cnf');
if($cnf->debug->on) { Zend_Debug::dump($str); } else { die('System error! Please try later'); } } }
 Kernel.php c gjvjom. try b catch
dct jib,rb gtht[dfnsdf.ncz b gthtlf.ncz 'njve j,hf,jnxbre. Äfktt d
pfdbcbvjcnb jn yfcnhjtr ht;bvf lt,fuf d rjyabuehfwbjyyjv afqkt, kb,j
gjrfpsdftncz byajhvfwbz j, jib,rt d ,hfeptht, kb,j dslftncz cjj,otybt j
dhtvtyys[ ytgjkflrf[.
Äkz njuj xnj ,s dct jib,rb, drk.xfz jib,rb yt yfqltyys[
rjynhjkkthjd b ltqcndbq, gtht[dfnsdfnm cdjbv j,hf,jnxbrjv, ytj,[jlbvj
ghb yfcnhjqrt front rjynhjkkthf dsgjkybnm $front->throwexceptions(true).
Ðf,jnf c rjynhjkkthjv
Êjynhjkkth zdkztncz cdzpe.obv pdtyjv vt;le dbljv b vjltkm.. Îcyjdyfz
pflfxf rjynhjkkthf 'nj ghjdthbnm lfyyst xnj ghbikb jn gjkmpjdfntkz,
dsgjkybnm nt bkb byst ltqcndbz c lfyysvb, bcgjkmpez vtnjls vjltkb, b
yfrjytw jghtltkbnm gthtvtyyst lkz dblf. Äkz bkk.cnhfwbb ghbdj;e
jnrjvtynbhjdfyysq rjl rjynhjkkthf ArticlesController
class ArticlesController extends Zend_Controller_Action {
public function indexAction() {
$articles = new ArticlesModel(); $articlesList = $articles->getArticles(); $this->view->articlesList = $articlesList;
}
public function viewAction() {
$articleId = $this->_getParam('articleId'); $articles = new ArticlesModel(); $articleInfo = $articles->getArticles($articleId); $this->view->articleInfo = $articleInfo;
}
}
Ðf,jnf c vjltkm.
Ðf,jnf c vjltkm. ghfrnbxtcrb yt jcdtotyf d vfyefkt, d afqkjdjq
cnherneht ghtlgjkjuftncz gfgrf models yj yt lftncz rjyrhtnys[
htrjvtylfwbq gj tt b cgjkmpjdfyb.. Êhjvt njuj vj;yj crfpfnm xnj gjyznbz
vjltkb d Zend Framework rfr nfrjdjuj ytn. Ðtfkbpfwbz 'njq xfcnb MVC
djpkfuftncz yf gktxb hfphf,jnxbrf. ß hfccvfnhbdf. vjltkm rfr yf,jh
rkfccjd jgthbhe.ob[ c lfyysvb, 'nj vj;tn ,snm gjkextybt lfyys[,
bpvtytybz lfyys[, dcnfdrf lfyys[ d ,fpe lfyys[ bkb lheujt [hfybkbot. ß
yt ljgecrf. cjcnfdktybz b dsgjkytybz sql-pfghjcjd d rkfccf[
rjynhjkkthjd. Ífpdfybt rf;ljuj rkfccf vjltkb cjcnjbn bp lde[ ckjd,
cfvjuj yfpdfybz ceoyjcnb lfyys[ b ckjdf "Model", gj fyfkjubb r
yfpdfybzv rjynhjkkthjd. Â hfccvfnhbdftvjv cfqnt-ghbvtht ceotcndetn ldf
rkfccf vjltkb, 'nj PagesModel b ArticlesModel.
 gthdjv rkfcct cj,hfys aeyrwbb hf,jnf.obt c ceoyjcnm. "cnhfybwf", dj
dnjhjv c ceoyjcnm. "cnfnmb". Êkfccs vjltkb zdkz.ncz yfcktlybrfvb
Zend_Db_Table_Abstract. Ìtnjls hf,jns c ,fpjq b ghbvth rkfccf vjltkb
cvjnhbnt yb;t.
Ðf,jnf c ,fpjq lfyys[Äkz ub,rjq hf,jns c ÁÄ Zend
Framework ghtlkfuftn ytcrjkmrj rkfccjd. Ífv gjyflj,zncz Zend_Db,
Zend_Db_Select, Zend_Db_Table, Zend_Db_Table_Select.
 Kernel.php pflftncz cjtlbytybt c ÁÄ, pflftncz flfgnth bcgjkmpetvsq gj evjkxfyb., b j,]trn cjtlbytybz pfyjcbncz d httcnh.
$db = Zend_Db::factory($cnf->db); Zend_Db_Table_Abstract::setDefaultAdapter($db);
Învtxe xnj tckb ds bcgjkmpetnt Zend_Cache dfv ghbujlbncz vtnjl Zend_Db_Table_Abstract::setDefaultMetadataCache, c tuj gjvjom. ds vj;tnt pfrtibhjdfnm vtnflfyyst nf,kbw. Òfrbv j,hfpjv pfghjc describe table yt ,eltn dsgjkyzncz ghb rf;ljv cjplfybb j,]trnf Zend_Db_Table.
Äfktt dcz hf,jnf c ,fpjq lfyys[ e yfc ,eltn cj,hfyf d rkfccf[ vjltktq.
Äkz ghbvthf hfccvjnhbv rjl vjltkb ArticlesModel
<?php
class ArticlesModel extends Zend_Db_Table_Abstract {
protected $_name = 'articles'; public function getArticles($articleId = NULL) {
$select = $this->getAdapter()->select() ->from($this->_name) ->join('users','users.id = articles.author_id',array('name')) ->order('id DESC') ->limit(2) ;
if (!is_NULL($articleId)) { $select->where("articles.id = ?",$articleId); $stmt = $this->getAdapter()->query($select); $res = $stmt->fetch();
} else {
$stmt = $this->getAdapter()->query($select); $res = $stmt->fetchAll();
}
return $res;
}
}
Êkfcc ArticlesModel yfcktletn
f,cnhfrnysq rkfcc Zend_Db_Table_Abstract. Òfrbv j,hfpjv, vs gjkexftv
djpvj;yjcnm bcgjkmpjdfnm tuj aeyrwbjyfk gj hf,jnt c ,fpjq.
Zend_Db_Table htfkbpetn gfnnthy Table Data Gateway. Èltz d njv xnj lkz
rf;ljq nf,kbws cjplftncz jnltkmysq rkfcc rjnjhsq ghtlyfpyfxty lkz
hf,jns bvtyyj c 'njq nf,kbwtq. Òfrbv j,hfpjv, hf,jnf c ÁÄ ltkbncz yf
kjubxtcrbt xfcnb, c rjnjhsvb, d ckexft ,jkmijuj j,]tvf ghjtrnf,
hf,jnfnm ujhfplj elj,ytt.
Ífghbvth, dcz hf,jnf cj cnfnmzvb d cfqnt-ghbvtht cj,hfyf d vjltkb ArticlesModel, f hf,jnf cj cnhfybwfvb cj,hfyf d vjltkb PagesModel.
Âct xnj yfv ye;yj, 'nj erfpfnm yfpdfybt nf,kbws c rjnjhjq vs hf,jnftv: protected $_name = 'articles';
Äkz hfpkbxys[ ckj;ys[ ds,jhjr bp ,fps bcgjkmpetncz rkfcc
Zend_Db_Select, jy ghtljcnfdkztn ub,rbq aeyrwbjyfk lkz dsgjkytybz
select pfghjcjd. Îcj,tyyj jnvtxe j,]trnyj-jhbtynbhjdfyysq gjl[jl
"gjrecjxyjuj" gjcnhjtybz sql-pfghjcjd. Ífghbvth:
$select = $this->getAdapter()->select() ->from('articles') ->where("articles.id = ?",$articleId) ->join('users','users.id = articles.author_id',array('name')) ->order('id DESC') ->limit(2);
"Êecrb" vjuen hfcgjkjufnmcz d ghjbpdjkmyjv gjhzlrt, 'nj jxtym elj,yj rjulf e dfc pfghjcs cnhjzncz lbyfvbxtcrb.
Äkz pfobns jn sql-by]trwbq d select pfghjcf[ ghtlkfuftncz vt[fybpv gktqc[jklthjd where('id = ?',$pageId);
 ckexft ;t update, delete pfghjcjd bcgjkmpe.ob[ eckjdbt where
c lfyysvb gjkextyysvb jn gjkmpjdfntkz, ytj,[jlbvj gjcnegfnm ytvyjuj gj
lheujve. Äkz pfobns jn sql-by]trwbq d nfrb[ ckexfz[ ye;yj 'rhfybhjdfnm
cgtw cbvdjks b ,hfnm lfyyst d rfdsxrb cfvjve. ß bcgjkmpe. cktle.obq
vtnjl: $id = $this->getAdapter()->quote($id);
Åckb pfghjcs yf ds,jhre e dfc ljcnfnjxyj ghjcnst b yt nht,e.n lfyys[ bp
lheub[ nf,kbw, ds vj;tnt bcgjkmpjdfnm vtnjls fetchRow, fetchAll rkfccf
Zend_Db_Table (j,hfnbnt dybvfybt xnj fetchAll b fetchRow rkfccf Zend_Db_Table ntgthm htrjvtyle.ncz r bcgjkmpjdfyb. c Zend_Db_Table_Select), ghbvth:
<?php class PagesModel extends Zend_Db_Table_Abstract {
protected $_name = 'pages';
public function getPage($pageId) {
$select = $this->select() ->where('id = ?', $pageId); $row = $this->fetchRow($select); $res = $row->toArray(); return $res;
}
Ènjuj, tckb dfv ytj,[jlbvs pfghjcs yf dcnfdre, elfktybt, bpvtytybt
lfyys[ - ye;yj bcgjkmpjdfnm Zend_Db_Table. Åckb dfv ytj,[jlbvs ghjcnst
pfghjcs yf ds,jhre lfyys[ htpekmnfnjv rjnjhs[ tcnm lfyyst njkmrj jlyjq
nf,kbws - vj;yj bcgjkmpjdfnm Zend_Db_Table (f vj;yj b Zend_Db_Select).
Åckb ;t dfv ye;ys ckj;yst pfghjcs c gjkextybtv lfyys[ bp lheub[ nf,kbw
- ye;yj bcgjkmpjdfnm Zend_Db_Select.
Ðf,jnf c dbljv Zend_View b Zend_Layout
Äkz hf,jns c dbljv Zend Framework ghtlkfuftn ldf rkfccf, 'nj Zend_View b Zend_Layout.
Ïhb cjplfybb j,]trnjd 'nb[ rkfccjd d Kernel.php
z ghjbpdtk yt,jkmie. yfcnhjqre. Èpvtybk hfcibhtybt 'nb[ afqkjd yf
ghbdsxyjt tpl, b bpvtybk yfpdfybt ukfdyjuj layout vfrtnf. ß lfk tve
ghbdsxyjt yfpdfybt "index"
Âjn nfr dsukzlbn crhbgn dblf, jndtxf.obq pf cgbcjr cnfntq.
<ul> <?php foreach ($this->articlesList as $article): ?> <li><a href = "/articles/<?php print $article['id']; ?>/"><?php print $article['title']; ?></a></li> <?php endforeach; ?> </ul>
Êfr dblyj php rjl pltcm jnltkty jn html rjlf, rhjvt njuj
bcgjkmpetncz pascal-gjlj,ysq cbynfrcbc php lkz kexituj dbpefkmyjuj
djcghbznbz.
Zend_Layout htfkbpetn gfnnthy "lde['nfgyjt ghtlcnfdktybt" (Two
Step View pattern). Äfyysq gfnnthy ghtlyfpyfxty lkz vfrcbvfkmyj ub,rjq
hf,jns c vfrtnfvb dblf. Ñjplftncz ytrbq ukfdysq vfrtn lbpfqyf cfqnf.
Î,sxyj jy cjlth;bn rfhrfc html cnhfybws // Doctype <html> <head> // Ìtnf ntub // Ïjlrk.xtybt css b n l </head> <body> ... </body> </html>
À djn dct xnj yf[jlbncz vt;le <body></body>
hfp,bdftncz yf ,kjrb, ghbxtv e rf;ljuj ,kjrf tcnm cdjq vfktymrbq vfrtn.
Ýnj vj;tn ,snm vty., yjdjcnb, ,kjr fdnjhbpfwbb b n l. Òfrbv j,hfpjv,
tckb vs [jnbv bpvtybnm html rjl vty., vs vtyztv dctuj kbim jlby vfrtn.
Âjn nfr dsukzlbn rjl ukfdyjuj vfrtnf index.tpl
<?php print $this->doctype(Zend_View_Helper_Doctype::XHTML1_TRANSITIONAL); ?> <html> <head> <?php print $this->headTitle('I LOVE ZEND FRAMEWORK!'); ?> <?php print $this->headMeta()->appendHttpEquiv('Content-Type', 'text/html; charset=UTF-8'); ?> <?php print $this->headLink()->appendStylesheet($this->baseUrl.'public/design/css/style.css'); ?> <?php print $this->headScript(); ?> </head> <body> <div id="menu"> <?php print $this->partial('menu.tpl'); ?> </div> <div id="main"> <div id="left"> <div style = "margin:5px;">Ëexibt cnfnmb:</div> <?php print $this->action('index', 'articles'); ?> <div id = "copy">(c) San <a href = "http://zendframework.ru">http: </div> <div id="content"><?php print $this->layout()->content; ?></div> </div> </body> </html>
Êhjvt lde['nfgyjuj ghtlcnfdktybz Zend_Layout lftn gjvjoybrjd. Ýnj doctype, headTitle, headMeta, headLink, headScript. Ýnb gjvjoybrb dshexf.n tckb yfghbvth yf rfrjq nj jcj,jq cnhfybwt ds pf[jnbnt gjlrk.xbnm jcj,sq css bkb js afqk.
Ñ gjvjom. gjvjoybrf partial vj;yj gjlrk.xfnm lheubt vfrtns - ,kjrb, yfghbvth d dsitghbdtltyyjv rjlt nfr gjlrk.xftncz vty..
Êhjvt njuj vj;yj dspsdfnm hfpkbxyst ltqcndbz ghzvj bp vfrtnf. Èvtyyj
'nj lftn yfv djpvj;yjcnm hfp,bnm dtcm if,kjy cfqnf yf ,kjrb. Òfrbv
j,hfpjv, z gjlrk.xf. ,kjr "Ëexibt cnfnmb", b rjulf z pf[jxe e,hfnm tuj
cj dct[ cnhfybw, z elfk. njkmrj jlye cnhjxre, f tckb z pf[jxe bpvtybnm
tuj ajhvfn, z jnhtlfrnbhe. dctuj jlby view crhbgn.
Âjpvj;yj d rfxtcndt if,kjybpfnjhf ds pf[jnbnt bcgjkmpjdfnm
Smarty bkb xnj yb,elm d 'njv hjlt. Èyntuhfwbz c Zend Framework yt
dspjdtn ,jkmijuj nhelf. Íj [jxe jnvtnbnm xnj Zend_View b Zend_Layout
e;t cfvb gj ct,t jnkbxysq if,kjybpfnjh, ghbxtv yt nht,e.obq
bcgjkmpjdfybz yjdjuj cgtwbabxtcrjuj zpsrf if,kjybpfnjhf.
Çfrk.xtybt
Ñrfxfnm rjl ,tp ,b,kbjntr Zend (16 kb) Ñrfxfnm rjl c ,b,kbjntrfvb Zend (368 kb)
Äkz pfgecrf rjlf ytj,[jlbvj:
- Ít pf,snm xnj Zend Framework nht,etn php 5.1.4 bkb dsit
- Ócnfyjdbnm hfcibhtybt PDO c gjllth;rjq lhfqdthf mysql (tckb jyj yt ecnfyjdktyj)
- Ñrfxfnm
fh[bd, hfpfh[bdbhjdfnm tuj d document root dbhnefkmyjuj [jcnf. Ñfqn
,eltn hf,jnfnm njkmrj d document root, yj yt dj dkj;tyyjq gfgrt.
- Ñjplfnm ,fpe lfyys[ d rjlbhjdrt UTF-8
- Âsgjkybnm sql dump hfcgjkj;tyysq d rjhyt fh[bdf
- Înhtlfrnbhjdfnm rjyabuehfwbjyysq afqk applications/settings/config.php Ítj,[jlbvj erfpfnm yfpdfybt ÁÄ, bvz gjkmpjdfntkz b gfhjkm
Ðtpekmnfn hf,jns hfphf,jnfyyjuj cfqnf ghbvthf ljk;ty dsukzltnm ghbvthyj cktle.obv j,hfpjv.
Ðbc. 4. Âytiybq dbl cfqnf-ghbvthf
P.S.
Âtcm dsitbpkj;tyysq gjl[jl gjcnhjtybz ghbkj;tybz yf ,fpt Zend Framework
tcnm ce,]trnbdysv vytybtv fdnjhf b yt ghtntyletn yf gjkye.
j,]trnbdyjcnm b jgnbvfkmyjcnm. Ãkfdyjq wtkm. lfyyjq cnfnmb ,skj
gjrfpfnm, rfr vj;yj bcgjkmpjdfnm Zend Framework lkz gjcnhjtybz web
ghbkj;tybz. Ít dtcm rjl ghbdtltyysq d cnfnmt ghbcencndetn bvtyyj d
nfrjv dblt d fh[bdt, d ytrjnjhs[ vtcnf[ d cnfnmt jy yt ceotcndtyyj
bpvtyty, lkz kexitq yfukzlyjcnb.
P.P.S.
Ïhbyjie ,kfujlfhyjcnm Grisha Kostyuk aka naspeh pf gjvjom d yfgbcfybb cnfnmb.
P.P.P.S.
Åckb cnfnmz gjrfpfkfcm dfv gjktpyjq, ds vj;tnt gjvjxm hfpdbnb.
heccrjzpsxyjve cjj,otcnde zend framework, gjcnfdbd ccskre yf htcehc http://zendframework.ru.
 cktle.obq hfp z gkfybhe. hfcibhbnm ghbvth b jgbcfnm hf,jne c
Zend_Auth, Zend_Acl, Zend_Session, Zend_Cache, Zend_Date f nfr;t
lj,fdbnm hf,jne c Ajax
|