CMS íà îñíîâå ñòàíäàðòà ZF, èëè ïîñòðîåíèå ïðîñòîãî ñàéòà íà áàçå Zend Framework (ñ êîäîì)


   www.romver.ru
/ Ïîëíûé ñïèñîê ñòàòåé / CMS íà îñíîâå ñòàíäàðòà ZF

Êàê çàêàçàòü ñàéò


ÀÁÐÀÊÀÄÀÁÐÀ (Òîæå ñàìîå íî â ÷èòàåìîì âèäå)

Í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:

Ôfqkjdfz cnhernehf Zend Framework
Ðbc. 1. Ôfqkjdfz cnhernehf Zend Framework


À djn nfr dsukzlbn lthtdj gfgjr cfqnf:

Äthtdj gfgjr cfqnf yf ,fpt Zend Framework
Ð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.

Àkujhbnv hf,jns cfqnf yf ,fpt Zend Framework
Ð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

// Ïjlrk.xftv afqk yfcnhjtr
require 'applications/settings/config.php';

// Ñjplftv cnhjre gentq
$paths = implode(PATH_SEPARATOR,
array (
$config['path']['libs'],
$config['path']['models'],
$config['path']['system']
));

// Ïenb gj rjnjhsv ghjbc[jlbn gjbcr gjlrk.xftvs[ afqkjd, 'nj gfgrf ,b,kbjntr, vjltktq b cbcntvys[ afqkjd
set_include_path($paths);


// Ïjlrk.xtybt ukfdyjuj cbcntvyjuj rkfccf
require 'Kernel.php';

// Çfgecr ghbkj;tybz
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 {

// Çfgecr autoload
Zend_Loader::registerAutoload();

// Ñjplfybt j,]trnf rjyabuehfwbb
$cnf = new Zend_Config($config);

// Çfytctybt j,]trnf rjyabuehfwbb d httcnh
Zend_Registry::set('cnf', $cnf);

// Ïjlrk.xtybt r ,fpt lfyys[
self::setDbAdapter();

// Ïjlrk.xtybt afqkf c ghfdbkfvb vfhihenbpfwbb
if (file_exists($cnf->path->system.'routes.php')) {
require($cnf->path->system.'routes.php');
}

// Èybwbfkbpfwbz Zend_Layout, yfcnhjqrf genb r vfrtnfv, f nfr;t bvtyb ukfdyjuj vfrtnf.
Zend_Layout::startMvc(array(
'layoutPath' => $cnf->path->layouts,
'layout' => 'index',
));

// Ïjkextybt j,]trnf Zend_Layout
$layout = Zend_Layout::getMvcInstance();

// Èybwbfkbpfwbz j,]trnf Zend_View
$view = $layout->getView();

// Ífcnhjqrf hfcibhtybz vfrtnjd
$layout->setViewSuffix('tpl');

// Çflfybt ,fpjdjuj URL
$view->baseUrl = $cnf->url->base;

// Çflfybt genb lkz view xfcnb
$view->setBasePath($cnf->path->views);

// Ócnfyjdrf j,]trnf Zend_View
$layout->setView($view);

// Ífcnhjqrf hfcibhtybz view crhbgnjd c gjvjom. Action gjvjiybrjd
$viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer();
$viewRenderer->setView($view)
->setViewSuffix('tpl');

Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);

// Ñjplfybt j,]trnf front rjynhjkkthf
$front = Zend_Controller_Front::getInstance();

// Ífcnhjqrf front rjynhjkkthf, erfpfybt ,fpjdjuj URL, ghfdbk vfhihenbpfwbb
$front->setBaseUrl($cnf->url->base)
->setRouter($router);

// Çfgecr ghbkj;tybz, d rfxtcndt gfhfvtnhf gthtlftv genm r gfgrt c rjynhjkkthfvb
Zend_Controller_Front::run($cnf->path->controllers);

}
catch (Exception $e) {
// Ïtht[dfn bcrk.xtybq
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 (
// Ífcnhjqrb cjtlbytybz c ÁÄ
'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 rjynhjkkth

Zend_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.

// Ñjplfybt j,]trnf front rjynhjkkthf
$front = Zend_Controller_Front::getInstance();

// Ífcnhjqrf front rjynhjkkthf, erfpfybt ,fpjdjuj URL, ghfdbk vfhihenbpfwbb
$front->setBaseUrl($cnf->url->base)
->setRouter($router);

// Çfgecr ghbkj;tybz, d rfxtcndt gfhfvtnhf gthtlftncz genm r gfgrt c rjynhjkkthfvb
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 {

/**
* Óghfdktybt jib,rfvb
*
* @param exception $exception Ïtht[dfnsdftvjt bcrk.xtybt
*/

public static function catchException(Exception $exception) {

// Ïjkextybt ntrcnf jib,rb
$message = $exception->getMessage();
// Ïjkextybt nhtqcf jib,rb rfr cnhjrb
$trace = $exception->getTraceAsString();
$str = 'ERROR: ' . $message . "n" . $trace;

$cnf = Zend_Registry::get('cnf');

// Åckb drk.xty ht;bv jnkflrb jnj,hf;ftv cjj,otybt j jib,rt yf 'rhfy
if($cnf->debug->on) {
Zend_Debug::dump($str);
}
// Èyfxt dsdjlbv cjj,otybt j, jib,rt
else {
// Çltcm vj;tn ghjbc[jlbnm kjubhjdfybt jib,rb, edtljvktybt dt,vfcnthf b n l
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 {

/**
* Ñgbcjr cnfntq
*/

public function indexAction() {

// Ñjplfybt j,]trnf vjltkb, ,kfujlfhz autoload yfv ytn ytj,[jlbvjcnb gjlrk.xfnm rkfcc xthtp require
$articles = new ArticlesModel();
// Âsgjkytybz vtnjlf vjltkb gj gjkextyb. cgbcrf cnfnntq
$articlesList = $articles->getArticles();
// Îghtltktybt gthtvtyys[ lkz dblf
$this->view->articlesList = $articlesList;

}

/**
* Âs,hfyyfz cnfnmz
*/

public function viewAction() {

// Ïjkextybt gfhfvtnhf ghbitlituj jn gjkmpjdfntkz
$articleId = $this->_getParam('articleId');
// Ñjplfybt j,]trnf vjltkb
$articles = new ArticlesModel();
// Âsgjkytybz vtnjlf vjltkb gj gjkextyb. byajhvfwbb j cnfnmt
$articleInfo = $articles->getArticles($articleId);
// Îghtltktybt gthtvtyys[ lkz dblf
$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.

// Ïjlrk.xtybt r ÁÄ, nfr rfr Zend_Db "gjybvftn" Zend_Config,
// yfv ljcnfnjxyj gthtlfnm cgtwbfkmyj cajhvbhjdfyysq j,]trn rjyabuehfwbb d vtnjl factory
$db = Zend_Db::factory($cnf->db);
// Çflfybt flfgnthf gj evjkxfyb. lkz yfcktlybrjd rkfccf Zend_Db_Table_Abstract
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 {

// Èvz nf,kbws
protected $_name = 'articles';

/**
* Ïjkexbnm dct cnfnmb bkb jlye
*
* @param int $articleId Èltynbabrfnjh cnfnmb
* @return array
*/

public function getArticles($articleId = NULL) {

// Ñjplftv j,]trn Zend_Db_Select
$select = $this->getAdapter()->select()
// Òf,kbwf bp rjnjhjq ltkftncz ds,jhrf
->from($this->_name)
// Äj,fdktybt nf,kbws c gjvjom. join, erfpsdftncz gjkt cdzpb
->join('users','users.id = articles.author_id',array('name'))
// Ïjhzljr cjhnbhjdrb
->order('id DESC')
// Êjkbxtcndj djpdhfoftvs[ pfgbctq
->limit(2)
;

if (!is_NULL($articleId)) {

// Óckjdbt yf ds,jhre
$select->where("articles.id = ?",$articleId);
// Âsgjkytybt pfghjcf
$stmt = $this->getAdapter()->query($select);
// Ïjkextybt lfyys[
$res = $stmt->fetch();


}
else {

$stmt = $this->getAdapter()->query($select);
// Ïjkextybt vfccbdf lfyys[
$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
/**
* Ðf,jnf c cnhfybwfvb
*/

class PagesModel extends Zend_Db_Table_Abstract {

// Èvz nf,kbws
protected $_name = 'pages';

/**
* Ïjkexbnm jlye cnhfybwe (fkmnthyfnbdjq 'njve vtnjle vj;tn ,snm dcnhjtyysq vtnjl find)
*
* @param int $pageId Èltynbabrfnjh cnhfybws
* @return array
*/

public function getPage($pageId) {

// Ñjplfybt j,]trnf Zend_Db_Table_Select,
// Ífv yt ye;yj erfpsdfnm yfpdfybt nf,kbws rfr d Zend_Db_Select
$select = $this->select()
// Ífrkflsdftv eckjdbt
->where('id = ?', $pageId);

// Âsgjkyztv pfghjc b gjkexftv j,]trn Zend_Db_Table_Row d htpekmnfnt
// Ífv yt ye;yj ghtldfhbntkmyj dsgjkyznm pfghjc vtnjljv query, rfr d Zend_Db_Select
$row = $this->fetchRow($select);
// Ïhtj,hfpjdsdftv Zend_Db_Table_Row d vfccbd
$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://zendframework.ru</a></div>
</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:
  1. Ít pf,snm xnj Zend Framework nht,etn php 5.1.4 bkb dsit
  2. Ócnfyjdbnm hfcibhtybt PDO c gjllth;rjq lhfqdthf mysql (tckb jyj yt ecnfyjdktyj)
  3. Ñ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.
  4. Ñjplfnm ,fpe lfyys[ d rjlbhjdrt UTF-8
  5. Âsgjkybnm sql dump hfcgjkj;tyysq d rjhyt fh[bdf
  6. Î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.

Âytiybq dbl cfqnf yf ,fpt Zend Framework
Ð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
3
Ñîçäàíèå ýêñêëþçèâíûõ ñàéòîâ, þçèáèëèòè àíàëèç è áåñïëàòíûé àíàëèç ïîä çàïðîñû îñíîâíûõ ïîèñêîâûõ ìàøèí
Êîíòàêòíàÿ èíôîðìàöèÿ :
òåë. +7(98I) 7608865

Íàïèñàòü ïèñüìî íà e-mail
icq 415547094  romverðåéòèíã íà mail.ru ñàéòà romverinbox.ru
© 1997 - 2024 romver.ru

Ïîëíàÿ êàðòà ñàéòà Display Pagerank