CakePHPã¢ããªã±ã¼ã·ã§ã³ã®åºæ¬çãªè¨è¨æé (1) - URLè¨è¨ -
ã¤ã³ãããã¯ã·ã§ã³
CakePHPã¯MVCãã¶ã¤ã³ãã¿ã¼ã³ãæ¡ç¨ãã¦ãããåºæ¬çã«ããã«å¾ã£ãè¨è¨ãåºæ¬ã¨ãªãã¾ãã
ããããããç¨åº¦éçºãé²ãã ã¨ããã§ããã£ãããªè¨è¨ã®åé¡ã«ã¶ã¡å½ãããã¨ã¯å¤ãã§ãããã
ããã§ãããããåé¡ãåãä¸ãã¦ãè¨è¨ã®æéã¨ãã¦ã¾ã¨ãã¦ã¿ããã¨ã«ãã¾ãã
注ï¼ã¨ã¦ã1åã§æ¸ããããã¨ã¯æãã¾ãããé£è¼ã¨ãªãå¯è½æ§ãé«ãã§ãã
URLè¨è¨
CakePHPã®URLã¯ãæåã¯ç¬ç¹ã«è¦ããããããã¾ããã
http://example.com/users/view/1 ãªã©ããããhttp://example.com/user/hiromi2424 ãªã©ã®è¦æ ããæå¾
ãã¦ããæ¹ãå¤ãã®ã§ã¯ãªãã§ããããã
ããããã ããã¨ãã£ã¦ä»¥ä¸ã®ãããªã¢ã¯ã·ã§ã³ãURLã®å¼ã³åºãæ¹ã¯ãå¾ã
ã«é¿ãã¦ãã¾ãã
<?php // Route Router::connect( '/user/:nickname', array( 'controller' => 'users', 'action' => 'view' ), array( 'pass' => array('nickname'), ) ); ?> <? // Controller class UsersController extends AppController{ function view($nickname) { $this->set('user', $this->User->findByNickname($nickname)); } } ?> <?php // View echo $this->Html->link($user['User']['nickname'], '/user/' . $user['User']['nickname']); ?>
大ãã3ç¹ã®åé¡ãããã¾ãã
- URLãå¼ã³åºãæã«ãUser.nicknameãå¿ è¦ï¼user_idãããªãã£ããã©ãããï¼ï¼
- ããã¯ãã¼ã ã®éè¤ã許ãããªã
- ã«ã¼ãã夿´ãããå ´åããã¥ã¼ãã³ã³ããã¼ã©ãªã©ã®è©²å½URLå¼ã³åºããå ¨ã¦å¤æ´ããå¿ è¦ããã
IDãURLã«å«ãããã¯è¦ä»¶æ¬¡ç¬¬ã§ããããã£ãããã ãã®ãã¨ã§å¾ã«é大ãªå¤æ´ã«ãªãããã¾ããã
URLã«IDãå«ã¾ãã¦ããªãã¦ããIDãå
ã«ã¢ã¯ã·ã§ã³ã®å¼æ°ãURLãæ±ãããã«è¨è¨ãã¦ããã°ãã®å¿é
ããªããªãã¾ãã
ã¾ããCakePHP1.3ããã¯ãã«ã¹ã¿ã ã«ã¼ãã¯ã©ã¹ãå©ç¨ã§ãã¾ãã
ãããå©ç¨ãããã¨ã«ãããæ¨æºçãªã¢ã¯ã·ã§ã³ã®å½¢ã§æ§ã
ãªURLãå©ç¨ãããã¨ãå¯è½ã¨ãªãã¾ãã
<?php // Route App::import('Lib', 'route' . DS . 'UserNicknameRoute'); Router::connect( '/user/:id/:nickname', array( 'controller' => 'users', 'action' => 'view' ), array( 'routeClass' => 'UserNicknameRoute', 'pass' => array('id'), ) ); ?> <?php //RouteClass class UserNicknameRoute extends CakeRoute { function match($params) { // controller, actionã®æ¯è¼ if (array_intersect_key($params, $this->defaults) != $this->defaults) { return false; } if (isset($params[0])) { // å®éã¯ãã£ãã·ã¥ããã¹ã $params['id'] = $params[0]; $params['nickname'] = rawurlencode(ClassRegistry::init('User')->field('nickname', array('id' => $params[0]))); unset($params[0]); } return parent::match($params); } } ?>
URLãããã¯ãã¼ã ãéã£ã¦ãã¦ãããããã¦ãã¾ãå ´åã¯ãã«ã¹ã¿ã ã«ã¼ãã¯ã©ã¹ã®parse()ãå®è£ ããããã³ã³ããã¼ã©ï¼ã³ã³ãã¼ãã³ãï¼ã§ãã§ãã¯ãªã©ããã¦å·¥å¤«ãã¾ãããã
ã¾ããæååã§ã®URLã®å¼ã³åºãï¼'/user/' . $user['User']['nickname']ï¼ã¯æ¥µåããªãããã«ãã¾ãããã
ãã ããä¾å¤ã¯ããã¾ãã
- ãã¼ã ãã¼ã¸ï¼'/'ãæå®ï¼
- ç»åãªã©ã¢ã»ããã®ãã¹
- å¤é¨URL
ãªã©ã
å¼ã³åºãURLãã¢ã¯ã·ã§ã³ã®å ´åãå¿ ãæ¨æºçãªé åå½¢å¼ã§æå®ããããã«ãã¾ãããã
æå¾ã«
ãããCakePHPã®æ©è½ã«é
æ
®ããè¨è¨ãè¡ããã¨ã«ããã夿´ã«å¼·ããã¾ãæè»ãªã«ã¼ãã£ã³ã°ãè¡ãã¾ãã
åå«ãªé
åå°çã«è¦ããããããã¾ããããããã«ã¯ã¡ããã¨è¦ç´ã®ãã¸ãã¯ãåå¨ããã®ã§ãã
ï¼URLè¨è¨ã ãã§1åçµãã£ã¦ãã¾ã£ãã»ã»ã»ã©ããªããã¨ããã
è£è¶³ï¼ Togetter - 「CakePHPアプリケーションの基本的な設計指針 (1) へのツッコミなど」