è·å Žã§ã¯ããã®ãããªã¢ããªã±ãŒã·ã§ã³ãèšèšããããå人çã«ã³ãŒãã£ã³ã°ããå¿ èŠããããŸãã ãã ãããã®ãããžã§ã¯ãã«ã¯1ã€ã®éèŠãªèŠä»¶ããããŸããã ã¢ããªã±ãŒã·ã§ã³ã¯ãçå£ã§å®çžŸã®ãããã©ãããã©ãŒã ãã€ãŸãZend Frameworkã«åºã¥ããŠéçºããå¿ èŠããããŸãã èªäœã®ãèªè»¢è»ãã®äœ¿çšã¯åãå ¥ããããŸããã ççŽã«èšã£ãŠãç§ã¯ãŸã Zend Frameworkã®å®éã®çµéšããããŸããã ãããããã®ãã©ãããã©ãŒã ã¯æåã§ããã®èåŸã«ã¯æåãªéçºè ãããŸãã å€ãã®éçºè ã«ãã£ãŠãZend Frameworkã¯äžè¬ã«WebéçºæšæºãšèŠãªãããŠããŸãã ããã§ãããã«ãæ°ãããŠå å®ãªäœããåŠã¶çç±ããããŸãã ãããã£ãŠãç§ã¯ãã®ãããžã§ã¯ããç±å¿ã«åãäžããŸããã
以äžã¯ç§ã®å人çãªææ ãšå°è±¡ã®èª¬æã§ãã®ã§ãããããããªãã¯ããããããŸãã«ãè¿ã¥ããªãã§ãã ããã ããã¯ããããžã§ã¯ãã®äœæ¥ãå®äºããåŸã«æ®ã£ãææ çãªæ®éªžã§ãã ç§ã¯åããŠåçšãããžã§ã¯ãã§Zend Frameworkã䜿çšããŸããã
Zend Frameworkã¯ãWebã¢ããªã±ãŒã·ã§ã³ãéçºããããã®åªãããèãæããã䟿å©ãªãã©ãããã©ãŒã ãšããŠäœçœ®ä»ããããŠããŸãã ç§ã®æèŠã§ã¯ãå žåçãªWebã¢ããªã±ãŒã·ã§ã³ãšã¯äœã§ããïŒ ãŸãããããã¯å€ãã®ç°ãªãã¹ã¯ãªãŒã³ãå€ãã®åœ¢ãå€ãã®ãã¬ãŒãã§ãã ããã¯ãã¹ãŠãããŒã¿ããŒã¹ãéåžžã¯ãªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ã§ç©æ¥µçã«æ©èœããŸãã ããŠãMySQLã®å Žåã®95ïŒ ã§ãããå ·äœçã«ãªããŸãã ãããã£ãŠãWebã¢ããªã±ãŒã·ã§ã³ãéçºããããã®ãã©ãããã©ãŒã ããããã©ãŒã ãããŸããŸãªç»é¢ãããã³ãªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ã䜿çšãã䟿å©ãªäœæ¥ãäœæããè¯ãæ©äŒãå°ãªããšãæåŸ ããŠããŸãã ãããŠãç§ã¯ãã¹ã¿ãŒãå§ããŸããã
ç§ãæåã«ãããªããã°ãªããªãããšã¯ãZend Frameworkèªäœã®åºæ¬ãåŠã¶ããšã§ããã ãã®ãã©ãããã©ãŒã å°çšã®æ¬ã Zend Framework ããèªã¿ãŸããã PHP Webã¢ããªã±ãŒã·ã§ã³éçºã Vikram Vaswaniã«ããæçš¿ ãâ çŸæç¹ã§ã¯ããã®ãããªãã¬ãŒã ã¯ãŒã¯ã«é¢ãããã·ã¢èªçã®æžç±ã¯ã»ãšãã©åºçãããŠããªãããã§ãã ååãšããŠããã®æ¬ã¯éåžžã«åªããŠããŸãã ãããèªãã åŸãç§ã¯ãã¬ãŒã ã¯ãŒã¯ãæäœããæ¹æ³ã®äžè¬çãªç解ããããŸããã 次ã«ãã®ã£ãããåãããã®ãã¬ãŒã ã¯ãŒã¯ãä»ã«äœãæäŸã§ããããäžè¬çã«ç解ããããã«ãå ¬åŒææžãç 究ãå§ããŸããã çµå±ã®ãšãããæ¬ã¯ãšã³ãžã³ã®ãã¹ãŠã®æ©èœãèæ ®ããŠããŸããã å æ¬çã§ããããããæžãããå ¬åŒããã¥ã¡ã³ãã¯ã framework.zend.com / manual / ruã«ãããŸããçŽ1é±éåŸãã¢ããªã±ãŒã·ã§ã³ã®éçºãéå§ã§ãããšå€æããŸããã
ã³ãŒãã£ã³ã°ã«é¢ããç§ã®äžç芳
補åãã©ã®ããã«æžãããã¹ããã«ã€ããŠã®ç§ã®å人çãªæèŠã«ã€ããŠã®ããã€ãã®èšèã ããã§ã圌ããæã ç§ãæ¹å€ãããããªããšã«ã€ããŠãèšåããŸãã
OOPãšOOPãã¿ãŒã³ã®äœ¿çšãå°éããŸãã ãã ããã¢ããªã±ãŒã·ã§ã³ãæ£åœåããã³ãŒããèªã¿ããããããããã®ãããªãæ¹åãæ¬åœã«ç°¡çŽ åããå¿ èŠããããŸãã ãã¿ãŒã³ã®ããã®ãã¿ãŒã³ã¯æªãã§ãã
è¯ãã³ãŒãã¯æ確ãªã³ãŒãã§ãã æ確ãªã³ãŒãã¯ç°¡æœãªã³ãŒãã§ãã çãã³ãŒããæžãããšãã§ããã°ãååãšããŠç解ãããããªããŸãã 1ã€ã®ã¢ãã¿ãŒç»é¢ã«åãŸããããè«ççã«æ¥ç¶ãããã³ãŒãã®æçã¯ãããåªããŠããŸãã
æ¢åã®ãœãªã¥ãŒã·ã§ã³ãã¢ãããŒãã§äœããç§ã«åããªãå Žåã¯ããã£ãšæºè¶³ã§ããç¬èªã®ãœãªã¥ãŒã·ã§ã³ãäœæããããšãèããŸãã ã¯ããå€ãã®äººãããããèªè»¢è»ã®çºæããšåŒãã§ããŸãã ããããç§ã¯é·ããŠæ²ãããŠä»ã®èª°ãã®ãã¡ã€ã«ãæåºããã®ã§ã¯ãªããå¿«é©ãªãã¡ã€ã«ãäœæããããšã奜ã¿ãŸãã
MVCã¯åªããŠããŸããããããã®å Žåãéçºããã»ã¹ãç°¡çŽ åããã³é«éåããããã§ã¯ãããŸããã å Žåã«ãã£ãŠã¯ãç¹ã«åçŽãªã¢ã¯ã·ã§ã³ã«é¢ããŠã¯ãããããéžè±ããããšãã§ããŸããããããã®ã¢ã¯ã·ã§ã³ããããããããŸãã ïŒããããMVCã¯ãŸã£ããå¿ èŠãªããšã¯èšããããããŸãããïŒä»¥äžã«äŸã瀺ããŸãã
if(@$_POST['action'] == 'done') { $dbi->exec(âUPDATE bug SET status='done' WHERE id=:bugIdâ, array('bugId'=>$bugid)); $message = âStatus changed to <b>Done</b>â; } elseif(@$_POST['action'] == 'delete') { // âŠ. } //âŠ. 20-30 ...
ã¯ããã¢ãã«ãã³ã³ãããŒã©ãŒãã«ãŒã¿ãŒããã¥ãŒãããã«æ··åšãããŸããã ããã¯govnokodã®äžéšã®ããã«èŠããŸãã ããããããã€ãã®æå³çãªã±ãŒã¹ã§ã¯ãè²»ããããæéãã³ãŒãã®éãããã³ãããªããµããŒãã®å¯èœæ§ã®èŠ³ç¹ããæ£åœåãããå Žåããã®ããã«æžããŸãã äžè¬çã«ãç§ã¯ç±å¿ãªMVCçä¿¡ã«å察ããåžžèãšææ ®æ·±ãã¢ãããŒãã«è³æã§ãã
ãã¡ããããã®èšäºã§èšåãããŠãããããžã§ã¯ãã«ã¯ããã®ãããªã³ãŒãã¯ãããŸããã ç§ã¯ãZend Framworkã«ãã£ãŠæ瀺ãããã¢ãããŒãããæèçã«éžè±ããã®ã«ååãªçµéšããã§ã«æã£ãŠãããšã¯æããªãã®ã§ããã®ã³ã³ã»ããã«å®å šã«åŸãããšãè©Šã¿ãŸããã
Webãããžã§ã¯ãã®ãã³ãã¬ãŒãã«ã€ããŠå°ã説æããŸãã Smartyãªã©ã®ãã³ãã¬ãŒãèšèªããã€äœ¿çšããããããããŸããã ããŠããªãæ¬æ ŒçãªPHPèšèªãååšããã®ã«ãäžè¬çã«å¶éãããæ°ããèšèªãçºæããã®ã§ããããïŒ ã¬ã€ã¢ãŠããã¶ã€ããŒãPHP shny ifïŒ...ïŒãšforeachïŒ...ïŒã®äœ¿çšæ¹æ³ãåŠã¶ã®ã¯æ¬åœã«é£ããã§ããïŒ Smartyã»ã©è€éã§ã¯ãããŸããããæ°ãããšããŸããã¯ãªèšèªããããžã§ã¯ãã«è¿œå ããŸããã
ãšããã§ããã³ãã¬ãŒãïŒãŸãã¯ãã¥ãŒïŒã¯éåžžã«è€éã§ãããããifããã³foreachã ãã§ãªããçžäºã«ç¶æ¿ãããã¯ã©ã¹ããªããžã§ã¯ããªã©ã®éåžžã«è€éãªæ§é ã䜿çšããå¿ èŠããããŸãã åæã«ããã¬ãŒã³ããŒã·ã§ã³ã®ã¿ã¹ã¯ã¯åããŸãŸã§ã-ãã©ã€ããŒã¿ããHTMLã³ãŒããçæããŸãã
äžè¬ã«ããã³ãã¬ãŒãã«ã€ããŠã¯ãç§ã¯åžžã«éåžžã®PHPã奜ã¿ãéçºè ããã³ãã¬ãŒãã«ããžãã¯ãããã·ã¥ããªãããšãçŽæããŸãã ãã³ãã¬ãŒããåŠçããã«ã¯ãã¿ã€ãã®æãåçŽãªé¢æ°ã䜿çšã§ããŸã
function renderTemplate($file, $vars) { foreach($vars as $_name => $_var) { $$_name = $_var; } require $file; } // renderTemplate(âpage.tpl.phpâ, array( 'menu' => array('/about'=>' ', '/contacts'=>'') 'title' => '' ));
ããã«ããã¡ãããã·ãŒã«ãããã£ãã·ã³ã°ã®ããã®æãç°¡åãªãã€ã³ãã£ã³ã°ã 幞ãã«å¿ èŠãªãã®ã¯ä»ã«ãªãããã§ãã
ããããããã³ãã¬ãŒãèšèªãšããŠã®XSLTã«å察ãããã®ã¯ãŸã ãããŸããã ãã ããæ å ±ãæ瀺ããããã®ãªãã·ã§ã³ãå€ããªããæ¯èŒçåçŽãªå Žåã®ã¿ã§ãã ããŠãåä¿¡ããããŒã¿ã«å®å šã«äŸåããŠããããçš®ã®å°çã®ãããªæ§é ãšãžãªã¡ããªã®ãã¢XSLTãã³ãã¬ãŒããç°¡åã«äœæããããšã¯ã§ããŸããã ããã§ã¯ããµã€ã¯ã«ãšãªããžã§ã¯ããããã³ããªã¢ãŒãã£ãºã ãšç¶æ¿ã®äž¡æ¹ãå¿ èŠã§ãã
Zend Frameworkãã€ã³ã¹ããŒã«ãã
å€æãããšããããã®ãã¬ãŒã ã¯ãŒã¯ã®ééã¯çŽ25MBã§ãçŽ3,000åã®ãã¡ã€ã«ãå«ãŸããŠããŸãã 匱ããªãããšæã£ãïŒ ã©ããããããªãã¯å€¢ãèŠãããšãã§ããã ãã§ããããšããã¹ãŠç解ãããŠããŸãïŒ
ãŸããZend FrameworkããŒã¹ã®ã¢ããªã±ãŒã·ã§ã³ã®ãã£ã¬ã¯ããªæ§é ã¯ãç§ã«ãšã£ãŠå°ãã€ã©ã€ã©ãããããŸããã éåžžã«å€æ°ã®ãã£ã¬ã¯ããªãå«ãŸããŸãã ãããžã§ã¯ãã«åãçµãã§ãããšããç§ã¯ãã®æ§é ã§åžžã«å€±ãããŠããŸããã ãŸããäœæãããã¯ã©ã¹ã®ååã®èŠåããã¡ã€ã«ã®åœåèŠåãããã³ãããã®é 眮æ¹æ³ã¯ãäžæçãããããã«æããŸããã ãããã«ã¯ããžãã¯ããããŸãããæ£çŽã«èšããšãããã¯ãã¹ãŠããçŽæçã«è¡ãããšãã§ããŸãã ãŸããæåºã¹ã¯ãªããã®ãã£ã¬ã¯ããªã移åããã®ã¯ç¹ã«é¢åã§ãã ã©ãããããã®ãã¬ãŒã ã¯ãŒã¯ãé·æé䜿çšããŠãããšãæ £ããã§ãããã
ããããã¢ããªã±ãŒã·ã§ã³ã®æ°ããã»ã¯ã·ã§ã³ãäœæããååŒã«éåžžã«ããããããŠããŸããããã£ã¬ã¯ããªãäœæãããã¡ã€ã«ã«ååãä»ããã¯ã©ã¹ã«ååãä»ããã³ã³ãããŒã©ãŒã«ååãä»ããŸãã ãŸãã³ã³ãããŒã©ãŒã§ãããè¡ãã次ã«ãã¥ãŒã§ãããè¡ããŸãã ã¯ããã³ã³ãœãŒã«ãŠãŒãã£ãªãã£ããããå Žåã«ãã£ãŠã¯ãããèªåçã«è¡ãããšãã§ããŸãã ããããå€ãã®å Žåãããã¯ç¡èœã§ãã
Zend Frameworkã¯ãå ±æãã¹ãã£ã³ã°ã§åäœããããã«ã¯èšèšãããŠããªãããšãå€æããŸããã éå§ããã«ã¯ããããžã§ã¯ãã®ã«ãŒããšã¯ç°ãªããã£ã¬ã¯ããªãVirtualHostã«ç»é²ããå¿ èŠããããŸãã ãããã£ãŠãå°ãªããšãVDSãµãŒããŒãå¿ èŠã§ãã ãããããã§ããå ±æãã¹ãã£ã³ã°ã§æ©èœãããã®ãéçºããŠããã®ãªããããªãã¯ã¯ãŒã«ã§ã¯ãªããå°é家ã®éã«ã¯å± å ŽæããªããšããæèŠãèããŸããã ç§ã¯åžžã«ããã¹ãŠã®Webãããžã§ã¯ãã®95ïŒ ãå ±æãã¹ãã£ã³ã°ã§ã¹ãã³ããŠãããšèããŠããŸãããã ããŠããšã«ããããã¡ã€ã«ãæ°åã¹ãããŒã¯ããåŸã§ããã·ã£ãŒãã®ãããã¢ãããè¡ããããžã§ã¯ãããããŸããã
ããŒã¿ããŒã¹ãæäœãã
æåã«ãããŒã¿ã¢ãã«ãäœæããå¿ èŠããããŸããïŒMVCã³ã³ã»ããã®äžéšãšããŠïŒã çµå±ã®ãšãããZend Frameworkã¯ã¢ãã«ãäœæããæºåãæŽã£ããã®ãäœãæäŸããŠããŸããã å®éãç¬èªã®ã¯ã©ã¹ãäœæããã ãã§ããã®ã¡ãœãããããŒã¿ããŒã¹ã®æäœã§ãããŸãã¯ãã®æäœãå®è¡ããŸãã ã€ãŸã å Žåã«ãã£ãŠã¯ãã¢ãã«ã¯ã©ã¹ã¯SQLã¯ãšãªã®åãªãã©ãããŒã§ãããPHPãã€ã³ãã£ã³ã°ãè¿œå ãããSQLã¯ãšãªã®å ŽåããããŸãã
ããŒã¿ããŒã¹ãæäœããããã«ããã¬ãŒã ã¯ãŒã¯ã¯Zend_Dbã³ã³ããŒãã³ãã䜿çšããŸãã SQLãä»ããŠæãäžè¬çãªDBMSã§äœæ¥ã§ããŸãã
ãŸããSQLã䜿çšããã«ã¯ãšãªãäœæã§ããŸãããŸãããã¬ãŒã ã¯ãŒã¯å ã§SQLã«å€ããããªãããŒãªãªããžã§ã¯ããäœæããããšãã§ããŸãã å€ããå°ãªããè€éãªã¯ãšãªãäœæããããã«ã¯ããã®ã©ãããŒãæ§ç¯ãããããSQLã¯ãšãªãäœæããæ¹ã䟿å©ã§ç°¡åã§ããããã«æããŸããããã«ãããè€éãªã¯ãšãªãäœæã§ããªããªããŸãã äžè¬ã«ããã¬ãŒã ã¯ãŒã¯ã圢æããããã«åŒ·å¶ããããããSQLèªäœãããç 究ããæé©ãªæ¹æ³ã§SQLãå®è¡ããããšãæåŸ ããæ¹ããããšèããŠããŸãã ãã€ãã£ãSQLã¯èªã¿ãããããã¹ãŠã®ããã°ã©ããŒãç解ãããããç¹å®ã®DBMSã®ãã¹ãŠã®æ©èœã䜿çšã§ããŸãã ãªããžã§ã¯ãã¯ãšãªãã¶ã€ããŒã䜿çšãããšãç¹å®ã®ããŒã¿ããŒã¹ã®æ¹èšããæœè±¡åã§ãããšèšããŸããïŒ è€éãªã¯ãšãªã®å Žå-ã¯ãŒã«ãªã³ã³ã¹ãã©ã¯ã¿ã䜿çšããŠããåžžã«æœè±¡åããããšã¯äžå¯èœã§ãã ããŠããã1ã€ã®è°è«-DBMSãå€æŽããå¿ èŠãããåäžã®ãããžã§ã¯ããèŠããŠããŸããããåæã«ãããžã§ã¯ãå šäœãããžãã¹ããžãã¯ãããŒã¿ã¢ãã«ã®ã°ããŒãã«ãªå€æŽã¯ãããŸããã§ããã 以åã®ãããžã§ã¯ãã«åºã¥ããŠå®å šã«æ°ãããããžã§ã¯ããäœæããŸãã 以åã®ããŒãžã§ã³ã®ããŒã¿ã¢ãã«ã¯ã©ã¹ã®äžéšãäžè¬çãªããã¯ã°ã©ãŠã³ãã«å¯ŸããŠä¿åããŠããäœæ¥ã¯ããã»ã©æ¥œã«ãªããŸããã
ããã§ã¯ãZend Frameworkã§ã®SQLã®æäœã¯ã©ã®ãããªãã®ã§ããïŒ ããŠããã®ãããªãã®ïŒ
$ result = $ db-> fetchAssocïŒ 'SELECT * FROM items WHERE age> 18'ïŒ;
ãããŠã$ã®çµæã䜿çšããŠãããŒãã«åœ¢åŒã®é£æ³é åãæäœã§ããŸãïŒãã ããããã¯é åã§ã¯ãããŸããïŒãããã¯éåžžã«äŸ¿å©ã§ãã é åãããã«åŠçããããã«æž¡ãããšãã衚瀺ã®ããã«ãã¥ãŒã«çŽæ¥æž¡ãããšãã§ããŸãã
SQLã¯ãšãªã®çµæãæœåºãããããã«äŸ¿å©ãªã¡ãœãããããã€ããããŸãã
fetchColïŒïŒ-åäžã®åãååŸããŸãã ID shekã®ãªã¹ããååŸããå¿ èŠãããå Žåã«äŸ¿å©
fetchRowïŒïŒ-æåã®è¡ãååŸããŸãã äž»ããŒã§1ã€ã®ãšã³ããªãéžæããå¿ èŠãããå Žåã«äŸ¿å©ã§ãã
fetchOneïŒïŒ-1ã€ã®å€ã®ã¿ãååŸããŸãã ãŸããæ¬åœã«1ã€ã®å€ãååŸããå¿ èŠããããé åãã1ã€ã®èŠçŽ ãéžæããã³ãŒããæžããããªãå Žåã«ã䟿å©ã§ãã
fetchPairsïŒïŒ-å€ã®ãã¢ãé£æ³é åãšããŠååŸããŸãã ããŒãšå€ã®ããã·ã¥ãäœæããŸãã ç°ãªãèŸæžãäœæãããšéåžžã«äŸ¿å©ã§ãã
ãããã®ãã¹ãŠã®æ¹æ³ã«ãããã³ãŒãã®è¡æ°ãç°¡åã«æžããããšãã§ããŸãã ããããçš®é¡ã®è¿œå ã«ãŒããèŠçŽ ã®æœåºãªã©ãåé€ããŸãã ãã®çµæãã¢ãã«å ã®ã³ãŒãã®å€§éšåãå€§å¹ ã«åæžãããŸãã
fetchPairsïŒïŒã¡ãœãããé©ããŠããŸãã ãããŠãããŒã¿ããŒã¹ã®äž»ããŒãããŒãšããŠäœ¿çšãããããŒã¿ããŒã¹ã®é åã¬ã³ãŒããå€ãšããŠäœ¿çšããããããå°ãèå³æ·±ãå¿ èŠãªèŸæžãã©ã®ããã«ååŸããŸããïŒ éåžžã«äžè¬çãªã¿ã¹ã¯ã çãã¯äœããªãïŒ ãããæã§è¡ããfetchAssocïŒïŒãåŒã³åºããã«ãŒããåããŠæ°ããèŸæžé åãçæããŸãã æ®å¿µã§ãïŒ
ã§ã¯ãå ã«é²ã¿ãŸãããã ããŒãã«ããããŒã¿ãæœåºãããããããããªãŒã®ãããªé åãäœæããå¿ èŠããããŸãã ãã®äžè¬çãªæäœããŸã£ããå®è£ ãããŠããªãããšãããããŸãã ã€ãŸã 次ã®ãããªãã®ã¯ãããŸããïŒ
$ hierarhy = db-> fetch_treeïŒ "SELECT idãparent_idãtitle FROM tree 'ã' id 'ã' parent_id 'ïŒ;
ã©ãã SQLã§ã¯ããã©ã¡ãŒã¿ãŒãæž¡ãå¿ èŠããããŸãã ãŸããã¯ããäžèŠããã¹ãŠãç°¡åã§ãã ããã¯æ¬¡ã®ããã«è¡ãããŸãã
$ result = $ db-> fetchAssocïŒ 'SELECT * FROMãã¥ãŒã¹WHERE id =ïŒ'ã7ïŒ;
ããã€ãã®ãã¬ãŒã¹ãã«ããŒãé 眮ããããšãã§ããŸãã
$ result = $ db-> fetchAssocïŒ 'SELECT * FROM news WHERE chapter =ïŒAND type =ïŒ'ãarrayïŒ2ã8ïŒïŒ;
çŸåšãããã°ã©ã ãè€éã«ãªããšãã¯ãšãªã®è€éããå¢ãããã§ã«å€æ°ã®ãã©ã¡ãŒã¿ãŒãååšããå¯èœæ§ããããŸãã ååä»ããã¬ãŒã¹ãã«ããŒãå¿ èŠã§ãã ã·ãªã¢ã«çªå·ã§ãã¬ãŒã¹ãã«ããŒãæ°ããããšã¯ãã³ãŒãã®ãããããããå©é·ãããã®ã§ã¯ãããŸããã çµå±ã®ãšãããZend Frameworkã¯ããããå®è£ ããŠããŸããïŒ ãããã¯æ©èœããŸãããéžæããããŒã¿ããŒã¹ããããããµããŒãããŠããå Žåã®ã¿ã§ãã ããšãã°ãMySQLiãéžæããå Žåãååä»ããã¬ãŒã¹ãã«ããŒã§äœæ¥ããããšã¯ã§ããŸããã ååä»ããã©ã¡ãŒã¿ãŒããšãã¥ã¬ãŒãããã®ã¯æ¬åœã«å€§å€ã§ãããïŒïŒ ããŠããã®ããšã¯è§£æ±ºå¯èœã§ããããšãå€æããŸããã ã¢ããã¿ãŒãšããŠMysqliã§ã¯ãªãPdo_Mysqlãéžæãããšãååä»ããã©ã¡ãŒã¿ãŒãæ©èœãå§ããããšãããããŸããã PDOèªäœã®å éšã§ãšãã¥ã¬ãŒããããŸãã ççŽã«èšã£ãŠãç§ã¯ããã«ããã«å°éããŸããã§ããã in蟱ã¯åãŸã£ãããäžå¿«ãªåŸå³ãæ®ã£ãã
å€ãã®å ŽåãSQLã¯ãšãªã§ã¯ãã®ãããªã³ãŒãã䜿çšããå¿ èŠããããŸã
SELECT * FROMã¢ã€ãã WHERE id INïŒ1,3,5,8,12ïŒ
id-listã¯é åããåçã«çæãããŸãã
ç§ã¯å人çã«ãZend Frameworkã§ãããçŸããè¡ãæ¹æ³ãèŠã€ããŠããŸããã ç¹å®ã®quoteIntoïŒïŒã¡ãœããããããŸãã ãã®ããã«äœ¿çšã§ããŸã
$ sql = $ db-> quoteIntoïŒ "SELECT * FROM item WHERE id = INïŒïŒïŒ"ãarrayïŒ1,3,5,8,12ïŒïŒïŒ;
ã¯ãšãªã§ååä»ããã©ã¡ãŒã¿ãŒã䜿çšã§ãããããã€ãã®éšåããè€éãªã¯ãšãªãã³ã³ãã€ã«ã§ããªãããšã«èããŸããããå¿ èŠãªSQLã³ãŒããååŸããŸããã é åã空ã§ããããšãå€æããå Žåã«ã®ã¿ãæ§æãšã©ãŒãçºçããŸããããã¯ãSQLã«ãã£ãŠSELECT * FROMã¢ã€ãã WHERE id = INïŒïŒã«ãªãããã§ãã
ãããã£ãŠããã¹ãŠãifïŒcountïŒ$ idListïŒ> 0ïŒã§ã©ããããããæ¯åãæå³çã«ç¡å¹ãªèå¥åïŒããšãã°ã-1ïŒãé åã«è¿œå ããŸãã Krivenkoãããã解決çã ãããããšã«ãããããã¯å€æããŸãããïŒ æååãé£çµããããšã«ãã£ãŠã®ã¿è€éãªSQLã¯ãšãªãäœæã§ããããšã ãŸããSQLã¯ãšãªã¯ãPHPãåã蟌ãŸãã«åäžã®ã³ãŒããšããŠè¡šç€ºããããšã奜ã¿ãŸãã ããã«ãHTMLãšPHPãæ··ããããšã¯æªããšèããããŸãããSQLãšPHPã¯åé¡ãããŸããã
äžè¬çã«ãZend_Dbã¯ç§ãããŸã奜ãã§ã¯ãããŸããã§ããã ç§ã¯ãã®äœ¿çšãã倧ããªå©ç¹ã匷ãå©äŸ¿æ§ã«æ°ã¥ããŸããã§ããã ã¡ãªã¿ã«ãZend_Dbã®ééã¯500KB以äžã§ãã
äžè¬ã«ãããŒã¿ããŒã¹ãæäœããã«ã¯ã次ã®ãããªãã¯ã¡ãœããã䜿çšããŠèªå®¶è£œã®å°ããªã¯ã©ã¹ã䜿çšããããšã奜ã¿ãŸãã
connectïŒ$ configïŒ-ããŒã¿ããŒã¹ã«æ¥ç¶ããŸã
fetchTableïŒ$ sqlã$ paramsïŒ-ã¬ã³ãŒãã®é åãè¿ããŸã
fetchRowïŒ$ sqlã$ paramsïŒ-1ã€ã®ã¬ã³ãŒããè¿ããŸã
fetchColïŒ$ sqlã$ paramsïŒ-åäžã®åãè¿ããŸã
fetchOneïŒ$ sqlã$ paramsïŒ-ã¹ã«ã©ãŒå€ãè¿ããŸã
fetchPairsïŒ$ sqlã$ keyã$ valueã$ paramsïŒ-é åããŒãè¿ããŸã-å€
fetchDictïŒ$ sqlã$ keyã$ paramsïŒ-é åããŒãè¿ããŸã-ã¬ã³ãŒã
fetchTreeïŒ$ sqlã$ keyã$ parentã$ paramsïŒ-ããªãŒãè¿ããŸã
execïŒ$ sqlã$ paramsïŒ-ééžæã¯ãšãªãå®è¡ããŸã
getInsertIdïŒïŒ-æåŸã«çæãããèªåã€ã³ã¯ãªã¡ã³ããè¿ããŸã
getAffectedRowsïŒïŒ-å€æŽãããã¬ã³ãŒãã®æ°ãè¿ããŸã
å®è¡çµæã¯ãåã±ãŒã¹ã®è«çæ§é ã®éåžžã®é£æ³é åã§ãã ãã©ã¡ãŒã¿ã«ã¯åžžã«ååãä»ããããæ°å€ãæååããªã¹ããæž¡ãããšãã§ããŸãã SQLã§æ§æãšã©ãŒãçºçããå Žåãã¯ã©ã¹ã¯äŸå€ãã¹ããŒããŸãã ãã®ããã€ã¯ãã®ééã¯10KBçšåºŠã§ãççŽã«èšã£ãŠãç§ã«ãšã£ãŠã¯åžžã«ååã§ãã ä»ã®ããã°ã©ããŒã¯ãããå匷ããã®ã«10åãå¿ èŠãšããZend_Dbãå匷ããã«ã¯ããã¥ã¢ã«ã泚ææ·±ãå匷ããã®ã«äœæéãããããŸããããŸã 質åããããŸãã ã¯ã©ã¹ãæ¡åŒµããããã€ãã®ä»®æ³ã¡ãœããããªãŒããŒã©ã€ãããããšã«ãããä»ã®ããŒã¿ããŒã¹ã®ãµããŒããè¿œå ã§ããŸãã
ãã©ãŒã
Webã¢ããªã±ãŒã·ã§ã³ã§æ¬¡ã«éèŠãªã®ã¯ãã©ãŒã ã§ãã éåžžããããã®å€ãããããŸãã æ§é ãšå€èŠ³ãéåžžã«å€æ§ã§ãã Zend Frameworkã¯Zend_Formã䜿çšããŠãã©ãŒã ãæäœããŸãã
ãã©ãŒã ãäœæããã«ã¯ããã©ãŒã ãªããžã§ã¯ããäœæããå¿ èŠããããŸãã åãã£ãŒã«ãã®ãªããžã§ã¯ããè¿œå ããå¿ èŠããããŸãã ãã£ãŒã«ãã§ã¯ãããŸããŸãªãã©ã¡ãŒã¿ãŒãæ§æã§ããŸãã ããªããŒã¿ãŒãªã©ãæå®ããŸã 以äžã¯ãã£ãŒã«ããäœæããäŸã§ã
$username = new Zend_Form_Element_Text('username'); $username ->addValidator('alnum') ->addValidator('regex', false, array('/^[az]+/')) ->addValidator('stringLength', false, array(6, 20)) ->setRequired(true) ->addFilter('StringToLower');
ãã¹ãŠã®ãã£ãŒã«ããäœæãããããããããã©ãŒã ãªããžã§ã¯ãã«è¿œå ããŸãã
$form ->setAction('/somepath') ->setMethod('post') ->addElement($name) ->addElement($company) ->addElement($email) ->addElement($phone) ->addElement($action);
ããããã®ãã£ãŒã«ããããå Žåã«ã®ã¿ããããã®ããã€ãããã©ãŒã ã«è¿œå ããããšãå¿ããŸãã ãããšãã³ãŒãã«äœãããªã¹ãããå¿ èŠããããšãããããŠã©ããä»ã®å Žæã«ãã¹ãŠããªã¹ãããããã«åã³ã©ããå¥ã®å Žæã«çœ®ãå¿ èŠããããšããç§ã¯ææãå«ããŸãã ãããŠãããã§ã¯æ¯åãã£ãŒã«ããªããžã§ã¯ãã®å€æ°ã®ååãšåºåçšã®ååã瀺ãå¿ èŠããããŸã
addElementïŒïŒããã©ãŒã ãžã®ãªã³ã¯ã§ã¯ãªããè¿œå ãããèŠçŽ ãžã®ãªã³ã¯ãè¿ããå Žåãæµãããããªã€ã³ã¿ãŒãã§ãŒã¹ã䜿çšãããšãã³ãŒãã¯ã¯ããã«ç°¡æœã«ãªããç¹°ãè¿ãããªããªããŸãã ãã®ããã«
$form->addElement(new Zend_Form_Element_Text('username')) ->setRequired(true) ->addValidator('regex', false, array('/^[az]+/'));
ããããããã¯äžå¯èœã§ãïŒ
ãæ°ã¥ãã®ããã«ãããã§ã¯æ¢è£œã®ãã£ãŒã«ãããªããŒã¿ã䜿çšã§ããŸãã æªããªãã é»åã¡ãŒã«ãå ¥åãããã£ãŒã«ããäœæããŠãæ²ç·ã®é»åã¡ãŒã«ã¢ãã¬ã¹ãå ¥åããŠã¿ãŸãããã ãããè¡ãã«ã¯ãæšæºã®EmailAddressããªããŒã¿ãŒã䜿çšããŸãã
æ²ç·ã®ãxxxãã¡ãŒã«ãæå®ããŠã¿ãŸãããã ãšã©ãŒã¡ãã»ãŒãžã衚瀺ãããŸãã
ãxxxãã¯ãlocal-part @ hostnameãšããåºæ¬åœ¢åŒã®æå¹ãªã¡ãŒã«ã¢ãã¬ã¹ã§ã¯ãããŸãã
ããã£ã ãã¡ãããã¡ãã»ãŒãžããã·ã¢èªã«ç¿»èš³ããå¿ èŠããããŸãããç°¡åã«è¡ãããšãã§ããŸãã ãããŠãããã«æ¹Ÿæ²ããã¢ãã¬ã¹ãi@_domain.xxããè©ŠããŠã¿ãŸãããã
ãããŠãããã«ç§ãã¡ãåŸããã®ããããŸãïŒ
ã_domain.xxãã¯ã¡ãŒã«ã¢ãã¬ã¹ãi@_domain.xxãã®æå¹ãªãã¹ãåã§ã¯ãããŸãã
ã_domain.xxãã¯DNSãã¹ãåã®ããã«èŠããŸãããTLDãæ¢ç¥ã®ãªã¹ããšäžèŽãããããšã¯ã§ããŸãã
ã_domain.xxãã¯æå¹ãªããŒã«ã«ãããã¯ãŒã¯åã§ã¯ãªãããã§ã
ãiãã¯ãããã¢ãã 圢åŒãšç §åã§ããŸãã
ãiãã¯åŒçšç¬Šä»ãæåå圢åŒãšç §åã§ããŸãã
ãiãã¯ã¡ãŒã«ã¢ãã¬ã¹ãi@_domain.xxãã®æå¹ãªããŒã«ã«éšåã§ã¯ãããŸãã
6件ã®æçš¿ïŒ èª°ããããå¿ èŠãšããŸããïŒ å¹³åçãªãŠãŒã¶ãŒã¯ãTLDãåŒçšç¬Šä»ãæååãŸãã¯ãããã¢ãã ãäœã§ããããæ¬åœã«ç解ããŠããŸããïŒ å¹³åçãªãŠãŒã¶ãŒãå¿ èŠãšããã¡ãã»ãŒãžã¯ãInvalid E-mailã1ã€ã ãã§ãã ãã ããæšæºããŒã«ã§ã¯ãããèš±å¯ãããŠããŸããã ãã®ã¡ãã»ãŒãžã®ããŒãã®åºåãåãé€ãããã«ãç¬èªã®ããªããŒã¿ã¯ã©ã¹ãäœæããããšããå§ãããŸãã
ããŠããã¹ãŠã®ãã£ãŒã«ãããã¹ãŠã®ããªããŒã¿ãŒãèšå®ãããã©ãŒã ãäœæãããšããŸãããã ä»ãããåºããŠãã ããã ããã©ã«ãã§ã¯ããã©ãŒã ã®HTMLã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
<dl class="zend_form"> <dt id="phone-label"> <label for="phone" class="required"></label> </dt> <dd id="phone-element"> <input type="text" name="phone" id="phone" value=""> <ul class="errors"><li> </li></ul> </dd> ... </dl>
ããã«ãé ããã£ãŒã«ããDDèŠçŽ ã§ã©ãããããŸãïŒ ãããŠãç§ãã¡ã¯ãã©ãŒã ã«ã©ã®ãããªå¥åŠãªãã€ãã圢æãããã®ãçåã«æãå§ããŸãã äžè¬ã«ããã¬ãŒã ã¯ãŒã¯ã«ã¯ãé衚瀺ãã£ãŒã«ãã®ç¹å¥ãªåŠçã®ããã®ã€ã³ããªãžã§ã³ã¹ããããŸããã
ããããæãåçŽãªDLãªã¹ããç§ã«åããªãå Žåã¯ã©ãã§ããããïŒ çªç¶ãè€éãªæ§é ã®ãã©ãŒã ãäœæããå¿ èŠããããŸããïŒ ããã§ã¯ããã³ã¬ãŒã¿ã¯ã©ã¹ã䜿çšããããšãææ¡ãããŠããŸãã ãã³ã¬ãŒã¿ã¯ãç¹å®ã®HTMLã¿ã°ã§ãã©ãŒã èŠçŽ ãã©ããã§ããã¯ã©ã¹ã§ããããšãã°ãDTã¿ã°ã§ã¯ãªããDIVãªã©ã§èŠçŽ ãã©ããã§ããŸãã æãïŒ ãæ£ãããMVCãã¬ãŒã ã¯ãŒã¯ã«ãããã³ã³ãããŒã©ãŒå ã§çŽæ¥ãæãèªã¿ã«ããæ¹æ³ã§ã¬ã€ã¢ãŠããè¡ãå¿ èŠããããŸãã
ç§ã®æèŠã§ã¯ãéæšæºãã©ãŒã ã®çµçã¯ã¿ã€ãã»ãã¿ãŒã®ã¿ãè¡ãã¹ãã§ãã ãã©ãŒã ã®ãã¹ãŠã®ã¬ã€ã¢ãŠããå«ããã¥ãŒã¹ã¯ãªãããäœæããã ãã§ãã ãããŠãã³ã³ãããŒã©ãŒå ã§æ°åã®ã¯ã©ã¹ã®ãã³ã¬ãŒã¿ãŒã䜿çšããããšã¯ãæ§ããã«èšã£ãŠãæ²ãã£ãŠããŸãã
ãã©ãŒã ãæäœããããã®æãåçŽãªãèªè»¢è»ãã®äŸãæããŸããããããã«ããããã©ãŒã ãç°¡æœãã€äŸ¿å©ã«äœæã§ããŸãã
ãã©ãŒã ã®æ§æïŒ
$form = new UniversalForm(array( 'name' => array('label'=>'', 'required'=>true), 'email' => array('label'=>'', 'type'=>'email'), 'birthday' => array('label'=>' ', 'type'=>'date'), 'sex' => array('label'=>'', 'type'=>'choice', 'items'=>array('m'=>'', 'f'=>'')), 'code' => array('label'=>'', 'regExp'=>'/^\d{6}$/', 'regExpMessage'=>' ', 'value'=>'000000'), 'action' => array('type'=>'hidden', 'value'=>'updateInfo'), ));
ããã§ã¯ãã³ãŒãã®éãæžããããã«ããã©ãŒã èŠçŽ ã®ãªããžã§ã¯ããæ瀺çã«äœæãã代ããã«ãåçŽã«æ§æé åãäœæããããšãã§ããŸãã ããã¯ããã£ãŒã«ããªããžã§ã¯ããšããªããŒã¿ãæåã§äœæããå¯èœæ§ãæé€ãããã®ã§ã¯ãããŸãããã ããã§ã¯ã次ã®åœ¢åŒã䜿çšããŸãã
$ form-> setFromPostïŒïŒ; // POSTããããŒã¿ãèšå®ããŸã
$ form-> isValidïŒïŒ; //ããŒã¿ãæå¹ã§ããããšã確èªããŸãã ããã§ãªãå Žåããã©ãŒã éä¿¡ã¹ã¯ãªãããåºåãããšã©ãŒã¡ãã»ãŒãžãã€ã³ã¹ããŒã«ãããŸãã
$ data = $ form-> getValuesïŒïŒ; //å€ãååŸããŸã
$ form-> setValuesïŒ$ dataïŒ; //ãã£ãŒã«ãå€ãèšå®ããŸãã ã³ã³ã¹ãã©ã¯ã¿ãŒã§æ··ä¹±ããé åãä»ããŠåãããšãè¡ãããšã¯å¯èœã§ãã
$ form-> renderïŒ 'form.tpl.php'ïŒ; // HTMLãçæããŸãã ãã³ãã¬ãŒããæå®ãããŠããªãå Žåãããã©ã«ãã®ãã³ãã¬ãŒãã䜿çšãããŸãã
$ form-> renderJsïŒïŒ; //ã¯ã©ã€ã¢ã³ãåŽã®PHPããªããŒã¿ãè€è£œããJavaScriptããªããŒã¿ãçæããŸãã
ããŠãMVCã®èŠ³ç¹ããã¯ééã£ãŠããããã€ãã®ã¡ãœããããããŸãã
$ form-> getSqlSetïŒïŒ; // SQLã³ãŒãã®äžéšãè¿ããŸã
ãã®ããã«äœ¿çšã§ããŸã
$ sql =â UPDATE account SETâã$ form-> getSqlSetïŒïŒãâ WHERE id = 777â;
次ã®ã¡ãœããã¯åãç®çã§äœ¿çšãããŸãã
$ form-> getSqlFieldsListïŒïŒ;
$ form-> getSqlValuesListïŒïŒ;
ã¯ããããã¯å®å šã«æšæºçãªæ£ãã決å®ã§ã¯ãããŸããã ãããããã®åŸããã£ãŒã«ãã®ã»ããã¯ãã©ãŒã ã³ã³ã¹ãã©ã¯ã¿ãŒã§äžåºŠã ãèšè¿°ããå¿ èŠããããŸãã å€æŽãããšããã¹ãŠã®SQLã¯ãšãªãèªåçã«å€æŽãããŸãã
管çè
ååãšããŠãè€éãªWebã¢ããªã±ãŒã·ã§ã³ã§ã¯ã管çããã«ãŸãã¯ã³ã³ãããŒã«ããã«ãäœæããå¿ èŠããããŸãã ããšãã°ããã©ã¡ãŒã¿ã®èšå®ããã£ã¬ã¯ããªã®ç·šéãªã©ã ã€ãŸã å°ãªããšããã¬ã³ãŒããªã¹ããšãã£ã¿ãäœæããããã®ããŒã«ãå¿ èŠã§ãã å°ãªããšããã©ãããªãªã¹ããããã³è€éãªãããžã§ã¯ãã®å Žåããããã®ãªã¹ãã¯å€ãã®å Žåéå±€çã§ãªããã°ãªããŸããã
äžè¬ã«ããã®ãã¬ãŒã ã¯ãŒã¯ã§ã¯ããã«å¯Ÿå¿ããæºåã¯ã§ããŠããŸããã å¿ èŠã«å¿ããŠããã¹ãŠãæåã§å®è£ ããå¿ èŠããããŸãã ã€ãŸã åãšãã£ã¿ãŒã§ãããŒãã«ãšãã©ãŒã ãå«ãç»é¢ãäœæããå®éã«æåã§CRUDæäœãå®è£ ããŸãã
çµè«ãšå°è±¡
ãç解ã®ãšããããã®ãæ£ããããã¬ãŒã ã¯ãŒã¯ã¯ç§ã«ã¯ããŸãè¯ãå°è±¡ãäžããŸããã§ããã
ããããããããZend Framworkã¯æ¬¡ã®å Žåã§ãç¿åŸã§ããŸãã
1.ã¢ããªã±ãŒã·ã§ã³ã®èš±å®¹ã§ãããã¬ãŒã ã¯ãŒã¯ãäœæããã®ã«ååãªçµéšããªãå Žåã
2. MVCã®æäœæ¹æ³ããŸã£ããããããªããããã®ã€ããªãã®ãŒãäœéšãããå Žå
3. OOPãšå žåçãªèšèšãã¿ãŒã³ã®é©çšã«ã€ããŠååã«ç解ããŠããªãå ŽåãZend Framworkã¯å€ãã®äŸã瀺ããŸãã ããã§ã¯ãOOPãå¿ èŠãªå Žæãšå¿ èŠã§ãªãå Žæã§äœ¿çšãããŸããã
4.ãŸããZend Framworkã¯ãããŒã¿ããŒã¹ããããŒã¿ãæœåºããŠç»é¢ã«è¡šç€ºããã ãã®äœæ¥ã§ã¯ãªãåçŽãªã¢ããªã±ãŒã·ã§ã³ãäœæããã°ãæ£åžžã«æ©èœããŸãã ããšãã°ãäžéšã®ãã¥ãŒã¹ããŒã¿ã«ã補åã«ã¿ãã°ã
ãã ããä»ã®ãã¬ãŒã ã¯ãŒã¯ã«ç®ãåããæ¹ãè¯ãã§ããããïŒ Zend Frameworkã¯ãã§ã«å°ç€ã倱ãå§ããŠãããããããæ£åœãªçç±ããããŸãã
ãããŠãå人çã«ãç§ãäœæ¥ããããšãããã¬ãŒã ã¯ãŒã¯ã®ã»ãšãã©ãã¹ãŠã®ã³ã³ããŒãã³ãã§äžäŸ¿ã«ééããŸãããããã£ãšäŸ¿å©ã«ã§ããã¯ãïŒããããŸããã©ãããŠãããªããšã«æ°ä»ããªãã£ãã®ïŒã Zend Framworkéçºè ã®äž»ãªä»äºã¯ãOOPnoããã¹ãŠè¡ãããšã§ãããšããå°è±¡ãåããŸãããå¯èœãªããšã¯ãã¹ãŠããã¹ãŠã©ãããŒãã¢ããã¿ãŒã«ã©ãããããŠããã䟿å©ãã©ããã¯é¢ä¿ãããŸãããã©ã€ãã©ãªã®æœè±¡åã®ã¬ãã«ã¯éåžžã«é«ããããç解ããã®ãå°é£ã§ãããããŠæãéèŠãªããšã¯ãã»ãšãã©ãã¹ãŠã®ã³ã³ããŒãã³ããããŒãºã«åãããŠä»äžããå¿ èŠãããããšã§ãããã®ãŸãŸã®åœ¢ã§ã¯ããã¹ãŠãæåŸ ã©ããã«æ©èœããŸããã
ã¯ããããç¥ã£ãŠããŸãã確ãã«ç§ã¯ãã¬ãŒã ã¯ãŒã¯ã§äœãã誀解ããŸããã確ãã«ããã¥ã¢ã«ã«äœããæ¬ ããŠããããããŠä»ãç§ã¯RTFMã¹ã¿ã€ã«ã®ã³ã¡ã³ããååŸããŸããããããããã¯ææšã§ããããŸããåªãããã©ãããã©ãŒã ãç°¡åãã€è¿ éã«ç¿åŸããããã«é©åã§äŸ¿å©ãªãœãªã¥ãŒã·ã§ã³ã瀺ãå¿ èŠããããŸããããã§ã¯ãç§ã¯ãããæããŸããã§ããã
ãœããšãã®ãžã§ãŒã¯ãæãåºããŸãããå³é¢ã«åŸã£ãŠé£è¡æ©ãéãããšãèžæ°æ©é¢è»ã§ããããšãããããŸããããããŠãå³é¢ã«ã¯ããçµæã®è£œå-ãã¡ã€ã«ãä¿®æ£ããããšæžãããŠããŸããããšã³ãžã³ããã¡ã€ã«ã§é£è¡æ©ã«å€æŽããããããŸãããç®±ããåºããŠããã«ãã¹ãŠãé©åã«æ©èœããããã«ããŸãã
PSïŒèª°ãã®ãå®æçææ ããå·ã€ããå Žåãäºåã«è¬çœªããŸãã
PS2ãïŒãã®èšäºã¯ãZend Frameworkã«ã€ããŠæžãããŠããŸãããããŠãããã¯MVCã®ã¡ãªããã«ææŠããè©Šã¿ã§ã¯ãããŸããããæ®å¿µãªããå€ãã®äººã ããã®ããã«èããŸããã