ããã¯ãZend Framework 2ã䜿çšããåçŽãªã¢ããªã±ãŒã·ã§ã³ã®éçºã«é¢ããèšäºã®3çªç®ïŒæåŸïŒïŒã®éšåã§ãã
æåã®éšåã§ã¯ZendSkeletonApplicationã®æ§é ã調ã¹
ã2çªç®ã®éšåã§ã¯åçŽãªã¢ãžã¥ãŒã«ã®éçºäŸ
ã瀺ããŸããã ãã®ããŒãã¯ãŠãŒã¶ãŒãšã®äœæ¥ã«å°å¿µããTwigãã³ãã¬ãŒããšã³ãžã³ããããžã§ã¯ãã«ãã蟌ã¿ãŸãã
ãŠãŒã¶ãŒãšé£æºãã
åã®éšåã§èšè¿°ãããã³ãŒãã䜿çšãããšããã¹ãŠã®Webãµã€ã蚪åè
ã®ããã°æçš¿ãäœæãç·šéãããã³åé€ã§ããŸãã ãã®ã¢ãããŒãã¯ãã©ã®äœæ¥ãµã€ãã§ãåãå
¥ããããªããããã¢ããªã±ãŒã·ã§ã³ã®ããŸããŸãªæ©èœãžã®ç»é²/æ¿èªããã³ã¢ã¯ã»ã¹æš©ã®é
åžã®åé¡ã解決ãããšããæ¥ãŸããã
ZFã³ã¢ã³ãº
å€ãã®ã¢ãžã¥ãŒã«ãæšæºã¿ã¹ã¯ã解決ããZendãã¬ãŒã ã¯ãŒã¯çšã«æžãããŠããŸã;ãããã¯ç¹å¥ãªãµã€ãã§èŠã€ããããšãã§ããŸãïŒ
modules.zendframework.com ã æšæºçãªåé¡ã解決ããããã«èªåã®èªè»¢è»ãéçºãã代ããã«ãèªåã§æ¢è£œã®ãœãªã¥ãŒã·ã§ã³ã䜿çš/é©å¿ããæ¹ãé©åã ãšæããŸãïŒå°ãªããšãæ¢è£œã®ãœãªã¥ãŒã·ã§ã³ã¯ãèªè»¢è»ã®éçºãå§ããåã«ç ç©¶ããå¿
èŠããããŸãïŒã
å€ãã®ã¢ãžã¥ãŒã«éçºè
ã®äžã§ãZF CommonsããŒã ã¯éç«ã£ãŠããŸãããã®ããŒã ã®ã¡ã³ããŒã¯ããã®ãããžã§ã¯ãã§äœ¿çšããéåžžã«äŸ¿å©ãªã¢ãžã¥ãŒã«ã倿°éçºããŠããŸãïŒ
github.com/ZF-Commons ã ãã®æ®µéã§å¿
èŠãªãã®ãããã€ãèããŠãã ããã
Zfcbase
ä»ã®ZF Commonsã¢ãžã¥ãŒã«ãäŸåããã«ãŒãã«ïŒ
https://github.com/ZF-Commons/ZfcBase ïŒã
Zfcuser
ãã³ãã¬ãŒãïŒ
https://github.com/ZF-Commons/ZfcUser ïŒã§äœ¿çšããããã®ãŠãŒã¶ãŒç»é²/æ¿èªã¡ã«ããºã ããŠãŒã¶ãŒãããã¡ã€ã«ãããã³ãã¥ãŒãã«ããŒãå®è£
ããã¢ãžã¥ãŒã«ã
ZfcUserDoctrineORM
ããã©ã«ãã§ã¯ãZfcUserã¯æšæºã®ããŒã¿ããŒã¹ã¡ã«ããºã ã§åäœããŸãããã®ãããžã§ã¯ãã§ã¯Doctrine ORMã䜿çšããŠãããããZfcUserDoctrineORMã¢ãžã¥ãŒã«ïŒ
https://github.com/ZF-Commons/ZfcUserDoctrineORM ïŒãå¿
èŠã§ãã
Zfctwig
Twigãã³ãã¬ãŒããšã³ãžã³ãšã®çµ±åã®ããã®ã¢ãžã¥ãŒã«ïŒ
https://github.com/ZF-Commons/ZfcTwig ïŒã
ãã€ãŠã¿ã€ãº
ZfCommonsã®ã¢ãžã¥ãŒã«ã«å ããŠãã¢ã¯ã»ã¹æš©ãé
åžãã䟿å©ãªã¡ã«ããºã ãæäŸããBjyAuthorizeã¢ãžã¥ãŒã«ã䜿çšããŸãã ã¢ãžã¥ãŒã«ã®ããžãã¯ã¯ã·ã³ãã«ã§ãä»ã®ãã¬ãŒã ã¯ãŒã¯éã§å
±éã§ãã ãã®ã¢ãžã¥ãŒã«ã¯ããŠãŒã¶ãŒãããŒã«ãã¬ãŒãã®æŠå¿µã§åäœããŸãã
ãŠãŒã¶ãŒã¯èš±å¯ãããŠããå Žåãšèš±å¯ãããŠããªãå ŽåããããŸãã èš±å¯ãŠãŒã¶ãŒã¯ã1ã€ä»¥äžã®åœ¹å²ãæã€ããšãã§ããŸãã ãã®ã³ã³ããã¹ãã§ã®ã¬ãŒãã¯ãããŸããŸãªããŒã«ã®ã¢ã¯ã»ã¹æš©ãèšå®ããã³ã³ãããŒã©ãŒ/ã¢ã¯ã·ã§ã³ã§ãã
ãŠãŒã¶ãŒèšå®ã®æºå
ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãèšå®ããåã«ãDoctrineã䜿çšãããŠãŒã¶ãŒãšããŒã«ã®ãšã³ãã£ãã£ãäœæããå¿
èŠããããŸãã BjyAuthorizeã¢ãžã¥ãŒã«ã«ã¯ããã®ãããªãšã³ãã£ãã£ã®äŸãå«ãŸããŠããããããã«åºã¥ããŠMyUserã¢ãžã¥ãŒã«ãäœæããŸããã
ã¢ãžã¥ãŒã«ã«ã¯å
ã®ãã®ã¯å«ãŸããŠããŸããããã®ã³ãŒãã¯æ¬¡ã®
ãšããã§ãïŒ
github.com/romka/zend-blog-example/tree/master/module/MyUserãšã³ãã£ãã£ã
ãã®èšå®ïŒ
https://github.com/romka/zend-blog-example/blob/master/module/MyUser/config/module.config.php ïŒã«ã®ã¿æ³šæãæãå¿
èŠããã
ãŸã ã
return array( 'doctrine' => array( 'driver' => array( 'zfcuser_entity' => array( 'class' =>'Doctrine\ORM\Mapping\Driver\AnnotationDriver', 'paths' => array(__DIR__ . '/../src/MyUser/Entity') ), 'orm_default' => array( 'drivers' => array( 'MyUser\Entity' => 'zfcuser_entity', ) ) ) ), 'zfcuser' => array( // telling ZfcUser to use our own class 'user_entity_class' => 'MyUser\Entity\User', // telling ZfcUserDoctrineORM to skip the entities it defines 'enable_default_entities' => false, ), 'bjyauthorize' => array( // Using the authentication identity provider, which basically reads the roles from the auth service's identity 'identity_provider' => 'BjyAuthorize\Provider\Identity\AuthenticationIdentityProvider', 'role_providers' => array( // using an object repository (entity repository) to load all roles into our ACL 'BjyAuthorize\Provider\Role\ObjectRepositoryProvider' => array( 'object_manager' => 'doctrine.entity_manager.orm_default', 'role_entity_class' => 'MyUser\Entity\Role', ), ), ), );
ãã®æ§æã§ã¯ãzfcuserãšã³ãã£ãã£ããŠãŒã¶ãŒã®æäœãæ
åœããç¬èªã®ãã®ã«çœ®ãæããããŒã«ã®æäœãæ
åœãããšã³ãã£ãã£ãBjyAuthorizeã¢ãžã¥ãŒã«ã«ç€ºããŸãã
MyUserã¢ãžã¥ãŒã«ã
application.config.phpã«è¿œå ããŠãããã³ã³ãœãŒã«ã§ã³ãã³ããå®è¡ããå¿
èŠããããŸãã
./vendor/bin/doctrine-module orm:schema-tool:update
1ã€ç®ã¯ãããŒã¿ããŒã¹ã®MyUserã¢ãžã¥ãŒã«ã«ãã£ãŠäœæããããšã³ãã£ãã£ã®ããŒãã«ãäœæããããšã§ãã2ã€ç®ã¯ãæåã®ã³ãã³ããæ£ããæ©èœããããšã確èªããããšã§ãã
æåŸã®æºåã¢ã¯ã·ã§ã³ã¯ãé©åãªããŒã«ãäœæãããªã¯ãšã¹ããå®è¡ããããšã§ãã
INSERT INTO `role` (`id`, `parent_id`, `roleId`) VALUES (1, NULL, 'guest'), (2, 1, 'user'), (3, 2, 'moderator'), (4, 3, 'administrator');
ZfcUserãZfcUserDoctrineORMããã³BjyAuthorizeã®æ§æ
ãŸããComposerã®èšå®ã§æ°ããã¢ãžã¥ãŒã«ãç»é²ããå¿
èŠããããŸãã
"zf-commons/zfc-base": "v0.1.2", "zf-commons/zfc-user": "dev-master", "zf-commons/zfc-user-doctrine-orm": "dev-master", "doctrine/doctrine-orm-module": "0.7.*", "bjyoungblood/bjy-authorize": "1.4.*"
update
php composer.phar updateãå®è¡ããæ°ããã¢ãžã¥ãŒã«ã
application.config.phpã«è¿œå ã
ãŸã ã
'ZfcBase', 'ZfcUser', 'ZfcUserDoctrineORM', 'BjyAuthorize',
泚æïŒ ãããã®ã¢ãžã¥ãŒã«ã®äžéšã®èšå®ã¯ãèªå·±èšè¿°åã¢ãžã¥ãŒã«ã®èšå®ã«ãã£ãŠäžæžããããããããããã®ã¢ãžã¥ãŒã«ããªã¹ãã®äžçªäžã«è¿œå ããå¿
èŠããããŸãã
zfcuser.global.php.distãã¡ã€ã«ã
vendor / zf-commons / zfc-user / configãã£ã¬ã¯ããªãã
config / autoloadã«
ã³ããŒã ãååã
zfcuser.global.phpã«å€æŽããå¿
èŠã
ãããŸãã ãã®æ§æãã¡ã€ã«ã§ã¯ãå€ãèšå®ããå¿
èŠããããŸãã
'table_name' => 'users',
ãŠãŒã¶ãŒããŒãã«ã¯ããã©ã«ãã§ãŠãŒã¶ãŒã®æäœã«äœ¿çšãããããã§ãã
åããã£ã¬ã¯ããªã«ãããŸããŸãªããŒã«ã®ã¢ã¯ã»ã¹æš©èšå®ãå«ãæ§æãã¡ã€ã«
bjyauth.global.phpãäœæããå¿
èŠããããŸãã ãã®ãã¡ã€ã«ã®å®å
šçã¯githubã§èŠãããšãã§ããŸã
github.com/romka/zend-blog-example/blob/master/config/autoload/bjyauth.global.php ããã®æãè峿·±ãéšåã¯ãããŸããŸãªã³ã³ãããŒã©ãŒãžã®ã¢ã¯ã»ã¹æš©ã®é
åžãæ
åœãã以äžã«äžããããŸãïŒ
'guards' => array( 'BjyAuthorize\Guard\Controller' => array( array( 'controller' => 'zfcuser', 'action' => array('index', 'login', 'authenticate', 'register'), 'roles' => array('guest'), ), array( 'controller' => 'zfcuser', 'action' => array('logout'), 'roles' => array('user'), ), array('controller' => 'Application\Controller\Index', 'roles' => array()), array( 'controller' => 'MyBlog\Controller\BlogPost', 'action' => array('index', 'view'), 'roles' => array('guest', 'user'), ), array( 'controller' => 'MyBlog\Controller\BlogPost', 'action' => array('add', 'edit', 'delete'), 'roles' => array('administrator'), ), ), ),
æ§æããããã¹ãŠã®ãŠãŒã¶ãŒã®ã€ã³ããã¯ã¹ãžã®ã¢ã¯ã»ã¹ãšã¢ã¯ã·ã§ã³ã®è¡šç€ºãè¡ãã管çè
ããŒã«ãæã€ãŠãŒã¶ãŒã®ã¿ã®ã¢ã¯ã·ã§ã³ã远å /ç·šé/åé€ããããšãããããŸãã ããã§ããªã³ã¯/ããã°/远å ãã¯ãªãã¯ããããšã§ç°¡åã«ç¢ºèªã§ããŸã-ãšã©ãŒ403ãè¿ãããŸãã
ããã§ããªã³ã¯/ user / registerã䜿çšããŠç»é²ããSQLã¯ãšãªã§ãŠãŒã¶ãŒã«ç®¡çè
æš©éãå²ãåœãŠãããšãã§ããŸãã
INSERT INTO user_role_linker (user_id, role_id) VALUES (1, 4);
ïŒã¯ããZfcUserã¢ãžã¥ãŒã«ã¯ãŠãŒã¶ãŒããŒã«ã管çããããã®ç®¡çããã«ãæäŸããŸããïŒã
éçºè
ããŒã«ããŒã®ããŒãžã®äžéšã«ããæ¿èªåŸãçŸåšã®ãŠãŒã¶ãŒã®ããŒã«ã«é¢ããæ
å ±ã衚瀺ããã远å /ç·šé/åé€ã®ã¢ã¯ã·ã§ã³ã403ãšã©ãŒãè¿ããªããªããŸãã
ãããžã§ã¯ãã®çŸåšã®ç¶æ
ã®é¡èãªæ¬ ç¹ã¯ãããã°æçš¿ãç·šé/åé€ããããã®ãªã³ã¯ããã¹ãŠã®ãŠãŒã¶ãŒã«è¡šç€ºãããããšã§ãããã ããå¿åã®äººã
ã«ã¯ãã®ãããªã¢ã¯ã·ã§ã³ãå®è¡ããæš©éããããŸããã
BjyAuthorizeã¢ãžã¥ãŒã«ã«ã¯
isAllowed Viewãã©ã°ã€ã³ãå«ãŸããŠãããããåé¡ãç°¡åã«ä¿®æ£ã§ããŸãã æ¬¡ã®è¡ããã³ãã¬ãŒãã«è¿œå ããŸãã
if ($this->isAllowed('controller/MyBlog\Controller\BlogPost:edit')) {
察å¿ããã³ã³ãããŒã©ãŒ/ã¢ã¯ã·ã§ã³ãžã®ã¢ã¯ã»ã¹æš©ã®å¯çšæ§ã確èªããå¿
èŠãããå Žåãããã«ãããçŸåšã®ãŠãŒã¶ãŒãã¢ã¯ã»ã¹ã§ããªããã³ãã¬ãŒããªã³ã¯ã衚瀺ã§ããªããªããŸãã
åæ§ã«ã管çè
åãã®indexActionïŒïŒã¢ã¯ã·ã§ã³ã§ã¯ãå
¬éããããã®ã ãã§ãªããããã°æçš¿ã®å®å
šãªãªã¹ãã衚瀺ã§ããŸãã
if ($this->isAllowed('controller/MyBlog\Controller\BlogPost:edit')) { $posts = $objectManager ->getRepository('\MyBlog\Entity\BlogPost') ->findBy(array(), array('created' => 'DESC')); } else { $posts = $objectManager ->getRepository('\MyBlog\Entity\BlogPost') ->findBy(array('state' => 1), array('created' => 'DESC')); }
çŸåšã®åœ¢åŒã®ãããžã§ã¯ãã¯ã
github.com /
romka /
zend-blog-example /
tree / configured_userã®configured_userã¿ã°ã䜿çšããŠGithubãªããžããªã§å©çšã§ããŸãã
å°æ
ç§ã®ç·Žç¿ã§ã¯ãããã€ãã®ç°ãªããã³ãã¬ãŒããšã³ãžã³ã䜿çšããŸããããPython
Jinja 2ã¯ç§ãäœæ¥ããªããã°ãªããªãã£ããã³ãã¬ãŒããšã³ãžã³
ã®äžã§æã䟿å©ã ãšæããŸãã
Twig PHPãã³ãã¬ãŒããšã³ãžã³ã¯ãå
ã
Jinja 2ã®äœè
ã§ããArmin Ronacherã«ãã£ãŠéçºããããã®åŸã
Symfonyãã¬ãŒã ã¯ãŒã¯ã®éçºè
ã§ããFabien Potencierã圌ã®ãµããŒããšéçºãåŒãç¶ããŸããã
TwigãšZend Frameworkã«çµã¿èŸŒãŸããŠãããã³ãã¬ãŒããšã³ãžã³ã®äž»ãªéãã®1ã€ã¯ãTwigãã³ãã¬ãŒãã§PHPã³ãŒãã䜿çšã§ããªãããšã§ãã代ããã«ããã³ãã¬ãŒããšã³ãžã³ã«ã¯ã«ãŒããæ¡ä»¶ã¹ããŒãã¡ã³ããªã©ãå®è£
ããç¬èªã®æ§æããããŸãã Twigãã³ãã¬ãŒãã¯PHPã³ãŒãã«ã³ã³ãã€ã«ããããããPHPã³ãŒãã®ããã©ãŒãã³ã¹ãäœäžããããšã¯ãããŸããã
ãã³ãã¬ãŒãã®ç¶æ¿ããã¯ãããã£ã«ã¿ãŒã·ã¹ãã ãªã©ã®æ©èœã®ãããã§ãã Twigãã³ãã¬ãŒãã¯ã³ã³ãã¯ãã§èªã¿ãããã§ãã
èšçœ®
Twigãã€ã³ã¹ããŒã«ããã«ã¯ãæšæºã®æé ã«åŸãã ãã§ååã§ããcomposer.jsonã«è¡ã远å ãã
php composer.phar updateãå®è¡ããŠãã¢ãžã¥ãŒã«ã
application.config.phpã«è¿œå ã
ãŸã ã
次ã«ããã®ãã³ãã¬ãŒããšã³ãžã³ã䜿çšããã¢ãžã¥ãŒã«ã«ãview_managerã»ã¯ã·ã§ã³ã®æ§æãã¡ã€ã«ã«æ¬¡ã®è¡ã远å ããŸãã
'strategies' => array( 'ZfcTwigViewStrategy', ),
Twigã䜿çšããæºåãæŽããŸãã ããã«ãäž¡æ¹ã®ãã³ãã¬ãŒããšã³ãžã³ïŒTwigãšããã©ã«ãïŒãäžç·ã«äœ¿çšã§ããŸããã€ãŸãããã³ãã¬ãŒãã®äžéšã1ã€ã®ãã³ãã¬ãŒãã«å®è£
ããäžéšãå¥ã®ãã³ãã¬ãŒãã«å®è£
ã§ããŸãã
å°æãã³ãã¬ãŒã
äžèšã®ãã³ãã¬ãŒãã®ç¶æ¿ã¯
ãããããæ¬¡ã®å
容ã
æã€ããã©ã«ãã®
layout.twigãã³ãã¬ãŒã
ãäœæã§ããããšãæå³ããŸãã
<html> <head> <title> {% block title %}Default title{% endblock title %} </title> {% block script %} <script type="text/javascript" src="/js/jquery.min.js"></script> {% endblock script %} </head> <body> <div class="content"> {% block content %}{{ content|raw }}{% endblock content %} </div> <div class="sidebar"> {% block sidebar %}{{ sidebar|raw }}{% endblock sidebar %} </div> </body> </html>
次ã«ãlayout.twigããç¶æ¿ãããã³ãã¬ãŒããäœæã§ããŸãããã®ãã³ãã¬ãŒãã§ã¯ããã³ãã¬ãŒãã®å€æŽãããéšåã®ã¿ãåå®çŸ©ããŸãã
{% extends 'layout/layout.twig' %} {% block script %} {{ parent() }} <script type="text/javascript" src="some-additional-file.js"></script> {% endblock script %} {% block content %} Custom content {% endblock content %}
ããã©ã«ãã§ã¯ãåŸç¶ãã³ãã¬ãŒãã§ãªãŒããŒã©ã€ãããããããã¯ã芪ãã³ãã¬ãŒãã®ãããã¯ã眮ãæããŸãããã¹ã¯ãªãããããã¯ã®
{{parentïŒïŒ}}è¡ã«æ³šæããŠãã ããããã®äœ¿çšã¯ã芪ãã³ãã¬ãŒãã®åããããã¯ã®ã³ã³ãã³ãããã®ãããã¯ã«ããŒããããããšãæå³ããŸãã
次ã«ãæ°ãããã³ãã¬ãŒããšã³ãžã³ã䜿çšããŠãã³ãã¬ãŒããæžãçŽããŸãããã Zend Skeleton Applicationã®æšæºã®
layout.phtmlãã³ãã¬ãŒãããå§ããŸãããããã¯ããã¥ãŒ/ã¬ã€ã¢ãŠããã£ã¬ã¯ããª
github.com/romka/zend-blog-example/blob/master/module/MyBlog/view/layout/layoutã® MyBlogã¢ãžã¥ãŒã«ã§èŠã€ããããšãã§ããŸã
ãå°æããšãã°ãä»ã§ã¯æ¬¡ã®ä»£ããã«ãã¥ãŒãã«ããŒã䜿çšããŠãã©ãã ãã³ã³ãã¯ãã«ãªã£ããã«æ³šæããŠãã ããã
<?php echo $this->url('blog', array('action' => 'edit')); ?>
ããªãã¯é»è©±ããããšãã§ããŸãïŒ
{{ url('blog', {'action': 'edit'}) }}
代ããã«ïŒ
<?php echo $this->showMessages(); ?>
ã·ã³ãã«ïŒ
{{ showMessages() }}
ã¡ã€ã³ãã³ãã¬ãŒãã®åŠçåŸããã©ãŒã ãåŠçããŸãã ãŸããã¢ãžã¥ãŒã«ã®
ãã¥ãŒãã£ã¬ã¯ããªã§ã
ãã¯ããµããã£ã¬ã¯ããªã𿬡ã®å
容ã®
forms.twigãã¡ã€ã«ãäœæã
ãŸã ã
{% macro input(name, value, type, label, size, messages) %} {% if type != 'hidden' %} <div class="form-element-{{ name }}"> {% endif %} {% if label %} {{ label }}: {% endif %} {% if type == 'textarea' %} <textarea name="{{ name }}" size="{{ size|default(20) }}" {% if messages|length > 0 %}class="error"{% endif %}/>{{ value|e }}</textarea> {% elseif type == 'checkbox' %} <input type="{{ type }}" name="{{ name }}" value="1"{% if value == true %} checked="checked"{% endif %} {% if messages|length > 0 %}class="error"{% endif %}/> {% else %} <input type="{{ type|default('text') }}" name="{{ name }}" value="{{ value|e }}" size="{{ size|default(20) }}" {% if messages|length > 0 %}class="error"{% endif %}/> {% endif %} {% if type != 'hidden' %} </div> {% endif %} {% if messages|length > 0 %} <ul> {% for m in messages %} <li>{{ m }}</li> {% endfor %} </ul> {% endif %} {% endmacro %}
ãã®ãã¯ãã¯ããã©ãŒã ãã£ãŒã«ãã衚瀺ããããã«äœ¿çšãããŸãã å
¥åã§ã¯ãã£ãŒã«ãã®ãã©ã¡ãŒã¿ãŒãåãåããåºåã§ã¯htmlããŒã¯ã¢ãããè¿ããŸãã
ããã§ãæ¢åã®
add.phtmlãã³ãã¬ãŒããåé€ããæ¬¡ã®ã³ã³ãã³ããæã€æ°ãã
add.twigã«çœ®ãæããããšãã§ããŸãã
{% extends 'layout/layout.twig' %} {% import 'macros/forms.twig' as forms %} {% block content %} <h1>{{ title }}</h1> <form method="{{ form.attributes.method }}" action="{{ url('blog', {'action': 'add'}) }}"> {% for element in form %} {{ forms.input(element.attributes.name, element.value, element.attributes.type, element.label, 20, element.messages) }} {% endfor %} </form> {% endblock content %}
åæ§ã«ãæ®ãã®ãã³ãã¬ãŒããåç·šéããäžèŠã«ãªã£ãã¢ãžã¥ãŒã«* .phtmlãã³ãã¬ãŒããåé€ããŸããïŒ
github.com/romka/zend-blog-example/tree/master/module/MyBlog/view/my-blog/blogãããã«
ããã§ç§ã¯çµäºããããšæããŸãã ãã®ã³ã°ããã£ãã·ã³ã°ãäŸåæ§æ³šå
¥ããã¹ãã®äœæãªã©ãå€ãã®éèŠãªç¹ã«ã¯è§ŠããŸããã§ãããããããã®åé¡ã¯ãã¹ãŠå
¥éèšäºã®ç¯å²å€ã§ãã ããããåå¿è
ãZend Framework 2ãåŠã¶ããšã§ããã®èšäºã圹ã«ç«ã€åºçºç¹ã«ãªãããšãé¡ã£ãŠããŸãã
ç§ã¯ãã®èšäºã®3ã€ã®ããŒããã¹ãŠãæåã®ããŒãã®çºè¡åã«æžããŠãããããã¹ãã®å®ææã«ãããçµäºããããšãèšç»ããŸããã ã³ã¡ã³ããèªãã åŸãã¢ããªã±ãŒã·ã§ã³ãå°ãæ¹åããããšã«ããŸããã
- GET / POSTãªã¯ãšã¹ãã®ã¿ã€ãããã§ãã¯ãã代ããã«ãRESTã䜿çšããŸãã
- ã¢ã¯ã·ã§ã³ã®åã«ã¿ã¹ã¯ã®äžéšãããã¯ã«è»¢éãã
- ã¿ã¹ã¯ã®äžéšãæçŸ©ã®ããã¯ã«è»¢éãã
- éæ³ã®å®æ°ãåãé€ãã
- èšå®ãyamlã«è»¢éãã
- åŒã³åºãã®äžéšãDIïŒïŒïŒã«çœ®ãæããŸãã
ãããã®å€æŽãæºåããã«ã¯æéãããããŸããèšäºã®ç¬¬4éšãããã«å
¬éããããšæã£ãŠããŸãã