7.4. Á¦°øµÇ´Â ¼­ºê Ŭ·¡½º±º

7.4.1. µµÀÔ

Zend Framework ±×·³, µðÆúÆ®·Î Á¦°øµÇ´Â Ŭ·¡½º ÀÌ¿ÜÀÇ ¼±ÅûçÇ×µµ ÁغñÇØ ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î ¸®Äù½ºÆ® ¿ÀºêÁ§Æ®, ¶ó¿ìÅÍ, ±×¸®°í ¸®½ºÆù½º ¿ÀºêÁ§Æ®µî¿¡ ´ëÇØ¼­ ´Ù¸¥ ¼±ÅûçÇ×ÀÌ ÀÖ½À´Ï´Ù.

7.4.2. Zend_Controller_Request_Http

7.4.2.1. µµÀÔ

Zend_Controller_Request_Http (Àº)´Â,HTTP ȯ°æ¿¡¼­ »ç¿ëÇÏ´Â ¸®Äù½ºÆ® ¿ÀºêÁ§Æ®ÀÔ´Ï´Ù Zend_Controller_Request_Http (Àº)´Â µðÆúÆ®ÀÇ ¸®Äù½ºÆ® Ŭ·¡½ºÀ̸ç, Zend_Controller_Dispatcher ±×¸®°í ÀÌ¿ëµË´Ï´Ù.

7.4.2.2. ¸®Äù½ºÆ® µ¥ÀÌÅÍ¿¡ÀÇ ¾×¼¼½º

Zend_Controller_Request_Http (Àº)´Â, °ü·ÃÇÏ´Â °ª¿¡ÀÇ ¾×¼¼½º¸¦ ĸ½¶È­ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î ÄÜÆ®·Ñ·¯³ª ¾×¼Ç ¶ó¿ìÅÍÀÇ º¯¼öÀÇ Å°¸íÀ̳ª °ª, URI (À¸)·ÎºÎÅÍ ÆÛ½º ÇÑ Ãß°¡ÀÇ ÆÄ¶ó¹ÌÅÍÀÇ °ª µî¿¡ ¾×¼¼½º ÇÒ ¼ö ÀÖ½À´Ï´Ù. Zend_Controller_Request_Http ÀÇ ÇÁ·Ï½Ã·Î¼­ µ¿ÀÛÇÏ´Â °ÍÀ¸·Î, ½´ÆÛ ±Û·Î¹úÀÇ °ª¿¡ ÆÛºí¸¯ ¸â¹ö·Î¼­ ¾×¼¼½º Çϰųª ÇöÀçÀÇ º£À̽º URL (ÀÌ)³ª ¸®Äù½ºÆ® URI (À»)¸¦ °ü¸®ÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ½´ÆÛ ±Û·Î¹úÀÇ °ªÀº ¸®Äù½ºÆ® ¿ÀºêÁ§Æ®·Î ¼³Á¤ÇÒ ¼ö ¾ø½À´Ï´Ù. ±× ´ë½Å¿¡ setParam/getParam ¸Þ¼Òµå¸¦ »ç¿ëÇϰí, ÆÄ¶ó¹ÌÅ͸¦ ¼³Á¤ ȤÀº ÃëµæÇÕ´Ï´Ù.

[
ÁÖÀÇ] ½º¹Ù±×·Î¹Ù¸£µ¥ÀÌŸ

Zend_Controller_Request_Http ÀÇ ÆÛºí¸¯ ÇÁ·ÓÆÛƼ¸¦ »ç¿ëÇØ ½´ÆÛ ±Û·Î¹ú µ¥ÀÌÅÍ¿¡ ¾×¼¼½º ÇÒ ¶§¿¡ ÁÖÀÇÇØ¾ß ÇÒ Á¡Àº, ÇÁ·ÓÆÛƼ¸í ( ½º¹Ù±×·Î¹ß ¹è¿­ÀÇ Å°) (Àº)´Â ÀÌÇÏÀÇ ¿ì¼± ¼øÀ§·Î ¸ÅÄ¡ÇÏ´Â °ÍÀÔ´Ï´Ù. 1. GET, 2. POST, 3. COOKIE, 4. SERVER, 5. ENV.

ƯÁ¤ÀÇ ½´ÆÛ ±Û·Î¹úÇÏ°Ô ¾×¼¼½º ÇÏ·Á¸é , ÆÛºí¸¯ ¸Þ¼Òµå¸¦ »ç¿ëÇÏ´Â ¹æ¹ýµµ ÀÖ½À´Ï´Ù.¿¹¸¦ µé¾î, $_POST['user'] ÀÇ °ªÀ» ÃëµæÇÏ·Á¸é , ¸®Äù½ºÆ® ¿ÀºêÁ§Æ®»ó¿¡¼­ getPost('user') (À»)¸¦ ÄÝ ÇÕ´Ï´Ù.

7.4.2.3. º£À̽º URL ¹× ¼­ºê µð·ºÅ丮

Zend_Controller_Request_Http (Àº)´Â, ¼­ºê µð·ºÅ丮·Î Zend_Controller_Router_Rewrite (À»)¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. Zend_Controller_Request_Http (Àº)´Â ÀÚµ¿ÀûÀ¸·Î º£À̽º URL (À»)¸¦ °ËÃâÇØ, ±×°ÍÀ» ÀûÀýÈ÷ ¼³Á¤ÇÕ´Ï´Ù.

¿¹¸¦ µé¾î,index.php (À»)¸¦ À¥ ¼­¹öÀÇ ¼­ºê µð·ºÅ丮 /projects/myapp/index.php ¿¡ µÎ¾úÀ» °æ¿ì´Â, º£À̽º URL (rewrite base) ÇÏ /projects/myapp (À¸)·Î ÇÏÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù. ¸ÅÄ¡ÇÏ´Â ·çÆ®¸¦ ã¾Æ³»±â Àü¿¡, ÀÌ ¹®ÀÚ¿­ÀÌ ÆÐ½ºÀÇ ¼±µÎ·ÎºÎÅÍ Á¦°ÅµË´Ï´Ù. À̰Ϳ¡ ÀÇÇØ, ¸ðµç ·çÆ®¿¡ ºÒÇÊ¿äÇÑ ¹®ÀÚ¸¦ Ãß°¡ÇÒ Çʿ䰡 ¾ø¾îÁý´Ï´Ù. ·çÆ® 'user/:username' (Àº)´Â, http://localhost/projects/myapp/user/martel ¹× http://example.com/user/martel ÀÇ ¾çÂÊ ¸ðµÎ¿¡ ¼º³É ÇÏ°Ô µË´Ï´Ù.

[
ÁÖÀÇ] URL ÀÇ °ËÃâÀº ´ë¹®ÀÚ ¼Ò¹®ÀÚ¸¦ ±¸º°ÇÕ´Ï´Ù

ÀÚµ¿ÀûÀÎ º£À̽º URL ÀÇ °ËÃâ 󸮴 ´ë¹®ÀÚ ¼Ò¹®ÀÚ¸¦ ±¸º°ÇÕ´Ï´Ù.±× ¶§¹®¿¡, URL (¿Í)°ú ÆÄÀÏ ½Ã½ºÅÛÀÇ ¼­ºê µð·ºÅ丮¸íÀÌ È®½ÇÈ÷ ÀÏÄ¡ÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù ( ºñ·Ï Windows ¸Ó½ÅÀ̾ °°½À´Ï´Ù) .´ë¹®ÀÚ ¼Ò¹®ÀÚ°¡ ÀÏÄ¡ÇÏÁö ¾Ê¾Ò´ø °æ¿ì´Â noRoute ¾×¼ÇÀÌ ÄÝ µË´Ï´Ù.

º£À̽º URL ÀÇ °ËÃâ¿¡ ½ÇÆÐÇÏ´Â °æ¿ì´Â, Zend_Controller_Request_Http Ŭ·¡½º, ȤÀº Zend_Controller_Front Ŭ·¡½ºÀÇ setBaseUrl() ¸Þ¼Òµå¸¦ »ç¿ëÇØ º£À̽º ÆÐ½º¸¦ µ¡¾²±â ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. Á¦ÀÏ °£´ÜÇÑ ¹æ¹ýÀº Zend_Controller_Front ±×¸®°í ¼³Á¤ÇÏ´Â °ÍÀÔ´Ï´Ù. ÀÌ ¼³Á¤Àº ¸®Äù½ºÆ® ¿ÀºêÁ§Æ®¿¡ ÀΰèµË´Ï´Ù. µ¶ÀÚÀûÀÎ º£À̽º URL (À»)¸¦ ¼³Á¤ÇÏ´Â ¿¹¸¦ ³ªÅ¸³À´Ï´Ù.


/** 
 * Zend_Controller_Front  ±×¸®°í µ¶ÀÚÀûÀÎ º£À̽º URL  (À»)¸¦ ÁöÁ¤ÇÏ´Â °Í¿¡ ÀÇÇÑ ¸®Äù½ºÆ®ÀÇ µð½ºÆÌÄ¡
 */
$router     = new Zend_Controller_Router_Rewrite();
$controller = Zend_Controller_Front::getInstance();
$controller->setControllerDirectory('./application/controllers')
           ->setRouter($router)
           ->setBaseUrl('/projects/myapp'); //  º£À̽º URL  (À»)¸¦ ÁöÁ¤ÇÕ´Ï´Ù!
$response   = $controller->dispatch();

7.4.3. Zend_Controller_Router_Rewrite

7.4.3.1. µµÀÔ

Zend_Controller_Router_Rewrite (Àº)´Â, Ç¥ÁØÀÇ ¶ó¿ìÅÍÀÔ´Ï´Ù. ·çÆÃÀ̶õ,URI ( º£À̽º URL (À¸)·ÎºÎÅÍ ÃëµæÇß´Ù URI ÀÇ ÀϺÎ) (À»)¸¦ Àü°³ÇØ, ¾î´À ÄÜÆ®·Ñ·¯ÀÇ ¾î´À ¾×¼ÇÀÌ ¸®Äù½ºÆ®¸¦ ó¸®ÇÏ´ÂÁö¸¦ °áÁ¤Çϴ ó¸®ÀÔ´Ï´Ù. ÄÜÆ®·Ñ·¯ÀÇ °ªÀ̳ª ¾×¼Ç, ±×¸®°í ±× ¿ÜÀÇ ÆÄ¶ó¹ÌÅͰ¡ Zend_Controller_Request_Http ¿ÀºêÁ§Æ®¿¡ Á¤¸®ÇÕ´Ï´Ù. ÀÌ ¿ÀºêÁ§Æ®¸¦ ó¸®ÇÏ´Â °ÍÀÌ Zend_Controller_Dispatcher_Standard ÀÔ´Ï´Ù. ·çÆÃÀ» ÇÏ´Â °ÍÀº ÇÑ ¹ø¸¸, Áï ¸®Äù½ºÆ®¸¦ ÃÖÃÊ·Î ¹Þ°í ³ª¼­ ÃÖÃÊÀÇ ÄÜÆ®·Ñ·¯¿¡ 󸮰¡ °Ç³×¹ÞÀ» ¶§ »ÓÀÔ´Ï´Ù.

Zend_Controller_Router_Rewrite (Àº)´Â,mod_rewrite ¹Ù¶÷ÀÇ ±â´ÉÀ» PHP ¸¸À¸·Î ½ÇÇöµÉ ¼ö ÀÖµµ·Ï(µíÀÌ) ¼³°èµÇ°í ÀÖ½À´Ï´Ù. ÀÌ Ã³¸®´Â Ruby on Rails ÀÇ ·çÆÃÀ» ´Ù¼Ò Âü°í·Î Çϰí ÀÖ¾î À¥ ¼­¹öÀÇ URL °íÃÄ ½á¿¡ °üÇÑ ÀüÁ¦ Áö½ÄÀ» ÇÊ¿ä·Î ÇÏÁö ¾Ê½À´Ï´Ù. ÀÌÇÏÀÇ ´Ü¼øÇÑ mod_rewrite ·ê ( ÀÇ ¾ðÁ¨°¡) ±×¸®°í µ¿ÀÛÇϵµ·Ï(µíÀÌ) ¼³°èµÇ°í ÀÖ½À´Ï´Ù.


RewriteEngine on
RewriteRule !.(js|ico|gif|jpg|png|css)$ index.php

ȤÀº


RewriteEngine on
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1

Rewrite ¶ó¿ìÅ͸¦ IIS À¥ ¼­¹ö·Î »ç¿ëÇÏ·Á¸é Isapi_Rewrite (À»)¸¦ Isapi È®Àå ¸ðµâ·Î¼­ ÀνºÅç ÇÕ´Ï´Ù.±×¸®°í ´ÙÀ½°ú °°Àº ·êÀ» ±â¼úÇÕ´Ï´Ù.


RewriteRule ^[w/%]*(?:.(?!(?:js|ico|gif|jpg|png|css)$)[w%]*$)? /index.php [I]
[
ÁÖÀÇ] IIS Isapi_Rewrite

IIS (À»)¸¦ »ç¿ëÇϸé,$_SERVER['REQUEST_URI'] ÇÏÁö¸¸ Á¸ÀçÇÏÁö ¾ÊÀ»±î ÇÏ´ÃÀÇ ¹®ÀÚ¿­·Î ¼³Á¤µË´Ï´Ù.ÀÌ·¯ÇÑ °æ¿ì, Zend_Controller_Request_Http ÇÏ $_SERVER['HTTP_X_REWRITE_URL'] ÀÇ °ªÀ» »ç¿ëÇÕ´Ï´Ù.À̰ÍÀº Isapi_Rewrite È®Àå ¸ðµâÀÌ ¼³Á¤ÇÕ´Ï´Ù.

Lighttpd ÀÇ °æ¿ì´Â, ´ÙÀ½°ú °°Àº ·êÀ» »ç¿ëÇÕ´Ï´Ù.

url.rewrite-once = ( ".*.(js|ico|gif|jpg|png|css)$" => "$0", "" => "/index.php")

7.4.3.2. ¶ó¿ìÅÍÀÇ »ç¿ë¹ý

Rewrite ¶ó¿ìÅ͸¦ ÀûÀýÈ÷ »ç¿ëÇÏ·Á¸é , ¿ì¼± ±× ÀνºÅϽº¸¦ ÀÛ¼ºÇØ, ´ÙÀ½¿¡ À¯Àú Á¤ÀÇÀÇ ·çÆÃÀ» Ãß°¡ÇØ, ±×°ÍÀ» ÄÜÆ®·Ñ·¯¿¡ ÁÖÀÔÇÏÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù. ÀÌÇÏ¿¡ ÄÚµåÀÇ ¿¹¸¦ ³ªÅ¸³À´Ï´Ù.


/* 
¶ó¿ìÅ͸¦ ÀÛ¼ºÇÕ´Ï´Ù */

$router = $ctrl->getRouter(); //  µðÆúÆ®·Î rewrite  ¶ó¿ìÅ͸¦ µ¹·ÁÁÝ´Ï´Ù
$router->addRoute(
    'user',
    new Zend_Controller_Router_Route('user/:username', array('controller' => 'user', 'action' => 'info'))
);

7.4.3.3. ±âº»ÀûÀÎ ·çÆÃ

RewriteRouter ±×¸®°í °¡Àå Áß¿äÇÑ °ÍÀÌ, À¯Àú Á¤ÀÇÀÇ ·çÆÃÀÔ´Ï´Ù. À̰ÍÀº,RewriteRouter ÀÇ addRoute ¸Þ¼Òµå¸¦ ÄÝ ÇØ ÀÛ¼ºÇÕ´Ï´Ù. ÀÌ ¸Þ¼Òµå¿¡,Zend_Controller_Router_Route ÀÇ »õ·Î¿î ÀνºÅϽº¸¦ °Ç³×ÁÝ´Ï´Ù.


$router->addRoute('user', new Zend_Controller_Router_Route('user/:username'));

ÃÖÃÊÀÇ ÆÄ¶ó¹ÌÅͰ¡ ÀÌ ·çÆ®ÀÇ À̸§ÀÔ´Ï´Ù.ÇöÀç´Â ´Ù¼Ò ÀåȲ¼ºÀÌ ³²¾Æ ¹ö·Á ÀÖ½À´Ï´Ù¸¸, Àå·¡´Â,URL ºäÇ츣ÆÄ Áß(¾È)¿¡¼­ À̰ÍÀ» »ç¿ëÇØ, ºä³»¿¡¼­ °£´ÜÇÏ°Ô URL (À»)¸¦ »ý¼ºÇÒ ¼ö ÀÖ°Ô µÉ ¿¹Á¤ÀÔ´Ï´Ù. ¿©±â¼­ Á¤ÀÇÇÑ ·çÆ®¸¦ »ç¿ëÇÏ´Â ¹æ¹ýµµ ¾Ë¾Æ µÑ Çʿ䰡 ÀÖ°ÚÁö¿ä. »çÀü¿¡ Á¤ÀÇÇÑ ·çÆ®¸¦ ÃëµæÇÏ·Á¸é ,RewriteRouter ÀÇ getRoute ¸Þ¼Òµå¸¦ »ç¿ëÇÕ´Ï´Ù.µÎ¹øÂ°ÀÇ ÆÄ¶ó¹ÌÅÍ´Â, Zend_Controller_Router_Route ÀÇ ÀνºÅϽºÀÔ´Ï´Ù.

Zend_Controller_Router_Route ÀÇ constructor¡¡ ¡¡ ÀÇ ÃÖÃÊÀÇ ÆÄ¶ó¹ÌÅÍ´Â, ±× URL ¿¡ °ü·ÃÁþ´Â ·çÆ®ÀÔ´Ï´Ù. ¿¹¸¦ µé¸é, À§ÀÇ ¿¹·Î ³ªÅ¸³» º¸ÀÎ ·çÆ®´Â http://example.com/user/martel ¿¡ ´ëÀÀÇÕ´Ï´Ù.·çÆ®³»ÀÇ ÄÚ·ÐÀº URL º¯¼ö¸¦ ÀǹÌÇÕ´Ï´Ù.·çÆÃ¿¡ ¼º°øÇϸé, ÀÌ·¯ÇÑ º¯¼ö´Â Zend_Controller_Request ¿¡ ÁÖÀԵ˴ϴÙ. ±× ´ÙÀ½Àº Zend_Controller_Request::getParam (ÀÌ)³ª Zend_Controller_Action::_getParam ¸Þ¼Òµå·Î ¾×¼¼½º ÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù. À̹ø ¿¹¿¡¼­´Â,username (ÀÌ)¶ó´Â À̸§ÀÇ ÆÄ¶ó¹ÌÅÍ¿¡ 'martel' ±×·¸´Ù°í ÇÏ´Â °ªÀÌ ¼³Á¤µË´Ï´Ù.

[
ÁÖÀÇ] Á¤ÀÇÀÇ Â÷·Ê

Á¦ÀÏ ¸¶Áö¸·¿¡ ¸ÅÄ¡ÇÑ ·çÆ®°¡ Àû¿ëµÇ¹Ç·Î, ¹ü¿ëÀûÀÎ ·çÆ®´Â ÃÖÃÊ·Î Á¤ÀÇÇϵµ·Ï ÇսôÙ.

[
ÁÖÀÇ] Çã°¡µÇ´Â ¹®ÀÚ

ÇöÀçÀÇ ½ÇÀå¿¡¼­´Â, º¯¼öÀÇ ½Äº°Àڷμ­ slash (/) ÀÌ¿ÜÀÇ ¸ðµç ¹®ÀÚ¸¦ »ç¿ë °¡´ÉÇÕ´Ï´Ù¸¸, °¡´ÉÇÑ ÇÑ PHP ÀÇ º¯¼ö·Î »ç¿ë °¡´ÉÇÑ ¹üÀ§ÀÇ ¹®ÀÚ¸¸À» »ç¿ëÇÏ´Â °ÍÀ» °­ÇÏ°Ô Ãßõ ÇÕ´Ï´Ù. ÀÌ ½ÇÀåÀº Àå·¡ º¯°æµÉ ¿¹Á¤À̹ǷÎ,(PHP ÀÇ º¯¼ö·Î »ç¿ëÇÒ ¼ö ¾ø´Â ¹®ÀÚ¸¦ ÀÌ¿ëÇϰí ÀÖÀ¸¸é) ¹ö±×¸¦ ÀÏÀ¸Å³ °¡´É¼ºÀÌ ÀÖ½À´Ï´Ù.

·çÆ®·Î »ç¿ëµÇ´Â º¯¼ö °¡¿îµ¥,':controller' ¹× ':action' ÀÇ µÑÀº Ưº°ÇÑ Ãë±ÞÀÌ µË´Ï´Ù.ÀÌ·¯ÇÑ Æ¯¼ö º¯¼ö´Â,URL (À¸)·ÎºÎÅÍ ÄÜÆ®·Ñ·¯¿Í ¾×¼ÇÀ» °áÁ¤Çϱâ À§Çؼ­ »ç¿ëµË´Ï´Ù. ':action' º¯¼ö´Â, ±× ·çÆ® ȤÀº µðÆúÆ® ÆÐ·¯¹ÌÅͷμ­ Ç×»ó Á¤ÀǵǾî ÀÖÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù. ':controller' º¯¼ö°¡ ¸¸¾à Á¤ÀǵǾî ÀÖÁö ¾ÊÀº °æ¿ì´Â, µðÆúƮġ·Î¼­ IndexController ÇÏÁö¸¸ »ç¿ëµË´Ï´Ù.

[
ÁÖÀÇ] Ư¼ö º¯¼ö

ÀÌ·¯ÇÑ Æ¯¼ö º¯¼öÀÇ À̸§À» º¯°æÇÒ ¼öµµ ÀÖ½À´Ï´Ù.±× °æ¿ì´Â Zend_Controller_Request_Http ÀÇ setControllerKey ¸Þ¼Òµå³ª setActionKey ¸Þ¼Òµå¸¦ »ç¿ëÇÕ´Ï´Ù.


$router->addRoute(
    'user', new Zend_Controller_Router_Route(':controller/:action')
);

ÀÌ ·çÆ®°¡ Á¤Àǵǰí ÀÖÀ» ¶§ ºê¶ó¿ìÀú·Î 'http://example.com/news/latest' (À»)¸¦ ¼±ÅÃÇϸé, Zend_Controller_Dispatcher ÇÏ NewsController Ŭ·¡½ºÀÇ latestAction (À»)¸¦ ±âµ¿ÇÕ´Ï´Ù.

7.4.3.4. º¯¼öÀÇ µðÆúƮġ

·çÆ®¾ÈÀÇ º¯¼ö¿¡´Â, ¸ðµÎ µðÆúƮġ¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. µðÆúƮġ¸¦ ¼³Á¤ÇÏ·Á¸é ,Zend_Controller_Router_Route ÀÇ constructor¡¡ ¡¡ ÀÇ µÎ¹øÂ°ÀÇ ÆÄ¶ó¹ÌÅ͸¦ »ç¿ëÇÕ´Ï´Ù. ÀÌ ÆÄ¶ó¹ÌÅÍ´Â ¹è¿­ Çü½ÄÀÌ µË´Ï´Ù.¹è¿­ÀÇ Å°¿¡ º¯¼ö¸í, ±× Ű¿¡ ´ëÀÀÇÏ´Â °ªÀ¸·Î ÇØ¼­ µðÆúƮġ¸¦ ¼³Á¤ÇÕ´Ï´Ù.


$router->addRoute(
    'archive', new Zend_Controller_Router_Route('archive/:year', array('year' => 2006))
);

Á¶±Ý ÀÌÇØÇϱ⠾î·Á¿ïÁöµµ ¸ð¸¨´Ï´Ù¸¸, ÀÌ ·çÆ®´Â ¿¹¸¦ µé¸é 'http://example.com/archive/2005' ¹× 'http://example.com/archive' ¿¡ ¸ÅÄ¡ÇÕ´Ï´Ù.ÈÄÀÚÀÇ °æ¿ì, º¯¼ö year ÀÇ °ªÀº 2006 µË´Ï´Ù.

À§ÀÇ ¿¹´Â, ´ÜÁö year º¯¼öÀÇ ³»¿ëÀ» ¸®Äù½ºÆ®¿¡ ÁÖÀÔÇÒ ¸¸ÇÑ °ÍÀÔ´Ï´Ù. ÄÜÆ®·Ñ·¯³ª ¾×¼ÇÀ» ¼³Á¤Çϰí ÀÖÁö ¾Ê¾Ò±â ¶§¹®¿¡, ·çÆÃÀº ÇàÇØÁöÁö ¾Ê½À´Ï´Ù. ÀÌ ¿¹°¡ ¾µ¸ð°¡ ÀÖµµ·Ï(µíÀÌ) ÇÏ·Á¸é , ÄÜÆ®·Ñ·¯¿Í ¾×¼ÇÀÇ µðÆúƮġ¸¦ ¼³Á¤ÇÏÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù.


$router->addRoute(
    'archive',
    new Zend_Controller_Router_Route('archive/:year', array('year' => 2006, 'controller' => 'archive', 'action' => 'show')
);

ÀÌ ·çÆ®´Â,ArchiveController ÀÇ showAction (À»)¸¦ ½ÇÇàÇÕ´Ï´Ù.

7.4.3.5. º¯¼öÀÇ Á¦ÇÑ

Zend_Controller_Router_Route ¿¡ 3¹øÂ°ÀÇ ÆÄ¶ó¹ÌÅ͸¦ Ãß°¡ÇØ, º¯¼ö¿¡ °üÇÑ Á¦ÇÑ »çÇ×À» ¼³Á¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ Á¦ÇÑÀº, Á¤±Ô Ç¥ÇöÀ¸·Î ¼³Á¤ÇÕ´Ï´Ù.


$router->addRoute(
    'archive',
    new Zend_Controller_Router_Route('archive/:year', array('year' => 2006), array('year' => 'd+'))
);
[
ÁÖÀÇ] ·çÆ®ÀÇ ¸ÅĪ

Ruby on Rails °ú´Â ´Þ¸®,ZF ÀÇ RewriteRouter ÇÏ 3¹øÂ°ÀÇ ÆÄ¶ó¹ÌÅÍÀÇ Á¦ÇÑÀ» ä¿ìÁö ¾Ê´Â °æ¿ì¿¡µµ ·çÆ®¿¡ ¸ÅÄ¡ÇØ, µðÆúƮġ¸¦ »ç¿ëÇÏ°Ô µÇ¾î ÀÖ½À´Ï´Ù. ±× ¶§¹®¿¡,URL 'http://example.com/archive/test' (Àº)´Â À§ÀÇ ·çÆ®¿¡ ¸ÅÄ¡ÇØ, year ÇÏ 2006 (À¸)·Î ¼³Á¤µË´Ï´Ù.ÀÌ ±â´ÉÀº Àå·¡ º¯°æµÉ ¿¹Á¤À¸·Î, ÀÌ ¸Þ´º¾óÀ» ¾²°í ÀÖ´Â ½ÃÁ¡¿¡¼­´Â ¾ÆÁ÷ ³íÀÇÁßÀÔ´Ï´Ù.

7.4.3.6. º£À̽º URL ¹× ¼­ºê µð·ºÅ丮

Rewrite ¶ó¿ìÅÍ´Â ¼­ºê µð·ºÅ丮³»¿¡¼­µµ »ç¿ë °¡´ÉÇÕ´Ï´Ù. º£À̽º URL ÀÇ ÀÚµ¿ °ËÃâÀÌ Zend_Controller_Request_Http ¿¡ ÀÇÇØ¼­ ÇàÇØÁý´Ï´Ù.

º£À̽º URL ÀÇ °ËÃâ¿¡ ½ÇÆÐÇÏ´Â °æ¿ì´Â, Zend_Controller_Request_Http ÀÇ ¸Þ¼Òµå setBaseUrl() (À»)¸¦ »ç¿ëÇØ º£À̽º ÆÐ½º¸¦ µ¡¾²±â ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù ( Ç×7.4.2.3. ¡¸º£À̽º URL ¹× ¼­ºê µð·ºÅ丮¡¹ (À»)¸¦ ÂüÁ¶ÇØ ÁֽʽÿÀ) .

7.4.3.7. µðÆúÆ®ÀÇ ·çÆ®

Zend_Controller_Router_Rewrite ±×·³, µðÆúÆ®ÀÇ ·çÆ®°¡ Çϳª »çÀü¿¡ Á¤Àǵǰí ÀÖ½À´Ï´Ù. À̰ÍÀº 'controller/action' Çü½ÄÀÇ URI ¿¡ ¸ÅÄ¡ÇÕ´Ï´Ù. °Ô´Ù°¡ ¸ðµâ¸íÀ» ÃÖÃÊÀÇ ÆÐ½º ¿ä¼Ò·Î¼­ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.À̰Ϳ¡ ÀÇÇØ, 'module/controller/action Çü½ÄÀÇ URI ÇÏÁö¸¸ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ¶Ç,URI ¿¡ Ãß°¡µÈ ÆÄ¶ó¹ÌÅÍ¿¡µµ µðÆúÆ®·Î ¸ÅÄ¡ÇÕ´Ï´Ù.

·çÆ®°¡ ¾î¶»°Ô ¸ÅÄ¡ÇÏ´ÂÁö, ¿¹¸¦ º¾½Ã´Ù.


// 
ÀÌÇÏ¿Í °°ÀÌ µÇ¾î ÀÖ´Â °ÍÀ¸·Î ÇÕ´Ï´Ù
// $ctrl->setControllerDirectory(array(
//     'default' => '/path/to/default/controllers',
//     'news'    => '/path/to/blog/controllers',
//     'blog'    => '/path/to/blog/controllers'
// ));

¸ðµâ¸¸:
http://example/news
    module == news

¹«È¿ÀÎ ¸ðµâ°ú ÄÜÆ®·Ñ·¯¿ÍÀÇ ´ëÀÀ:
http://example/foo
    controller == foo

¸ðµâ +  ÄÜÆ®·Ñ·¯:
http://example/blog/archive
    module     == blog
    controller == archive

¸ðµâ +  ÄÜÆ®·Ñ·¯ +  ¾×¼Ç:
http://example/blog/archive/list
    module     == blog
    controller == archive
    action     == list

¸ðµâ +  ÄÜÆ®·Ñ·¯ +  ¾×¼Ç +  ÆÄ¶ó¹ÌÅÍ:
http://example/blog/archive/list/sort/alpha/date/desc
    module     == blog
    controller == archive
    action     == list
    sort       == alpha
    date       == desc

µðÆúÆ®ÀÇ ¶ó¿ìÅÍ´Â, Zend_Controller_Router_Route_Module ¿ÀºêÁ§Æ®¿¡ ¾Æ¹«°Íµµ ¼³Á¤ÇÏÁö ¾Ê°í ÀÛ¼ºÇÑ ÀνºÅϽºÀÔ´Ï´Ù.


// 
¶ó¿ìÅÍ v1 
(¿Í)°úÀÇ È£È¯¼ºÀ» À§ÇÑ ·çÆ®
$compat = new Zend_Controller_Router_Route_Module();
$this->addRoute('default', $compat);
[
ÁÖÀÇ] ¸ÅÄ¡ÇÑ´Ù URI

Zend_Controller_Router_Rewrite (Àº)´Â, °ú°Å¿ÍÀÇ È£È¯¼ºÀ» °í·ÁÇØ ¼³Á¤µÇ¾î ÀÖ½À´Ï´Ù. controller/action Çü½ÄÀÇ URI ¿¡ ÆÄ¶ó¹ÌÅͰ¡ ºÎ°¡µÈ ÆÐÅÏ¿¡µµ ÀÚµ¿ÀûÀ¸·Î ¸ÅÄ¡ÇÕ´Ï´Ù. µðÆúƮġ³ª ÇʼöÄ¡¸¦ °¡Áö°í ÀÖ´Â ÇÑ, ÆÄ¶ó¹ÌÅ͸¦ ºÎ°¡Çß´Ù°í »õ·Î¿î ·çÆ®¸¦ Ãß°¡ÇÒ ÇÊ¿ä´Â ¾ø½À´Ï´Ù. ÀÌ·¯ÇÑ Ãß°¡ ÆÄ¶ó¹ÌÅÍ¿¡ ¾×¼¼½º ÇÏ·Á¸é Zend_Controller_Action::_getParam() ¸Þ¼Òµå¸¦ »ç¿ëÇÕ´Ï´Ù.

µðÆúÆ®ÀÇ ·çÆ®¸¦ »ç¿ëÇÏ°í ½ÍÁö ¾ÊÀº °æ¿ì´Â, removeDefaultRoutes() ±×¸®°í »èÁ¦ÇÕ´Ï´Ù.


// 
ȣȯ¼ºÀ» À§ÇÑ µðÆúÆ® ·çÆ®¸¦ »èÁ¦ÇÕ´Ï´Ù
$router->removeDefaultRoutes();

7.4.3.8. Á¤ÀûÀÎ ·çÆ®

Áö±Ý±îÁöÀÇ ¿¹¿¡¼­´Â, ¸ðµÎ µ¿ÀûÀÎ ·çÆ®¸¦ »ç¿ëÇϰí ÀÖ¾ú½À´Ï´Ù. Áï, ƯÁ¤ÀÇ ÆÐÅÏ¿¡ ¸ÅÄ¡ÇÏ´Â °Í¿¡ ´ëÇÑ ·çÆ®ÀÔ´Ï´Ù. ±×·¯³ª, °¡²û ƯÁ¤ÀÇ ·çÆ®¸¦ °íÁ¤ÇØ ¹ö·Á, ÀϺη¯ Á¤±Ô Ç¥Çö ¿£ÁøÀ» ¿òÁ÷ÀÌ°í ½ÍÁö ¾ÊÀº °æ¿ìµµ ÀÖ°ÚÁö¿ä. ±×·² ¶§¿¡´Â Á¤ÀûÀÎ ·çÆ®¸¦ »ç¿ëÇÕ´Ï´Ù.

$loginRoute = new Zend_Controller_Router_Route_Static('login', array('controller' => 'login', 'action' => 'form'));
$router->addRoute('login', $static);

7.4.3.9. RewriteRouter (À¸)·ÎÀÇ Zend_Config ÀÇ »ç¿ë¹ý

»õ·Î¿î ·çÆ®¸¦ Ãß°¡ÇÒ ¶§¿¡, Çϳª Çϳª Äڵ带 °íÃÄ ¾²´Â °ÍÀÌ ¾Æ´Ï¶ó ¼³Á¤ ÆÄÀÏÀÇ º¯°æÀ¸·Î ´ëÀÀÇÒ ¼ö ÀÖÀ¸¸é Æí¸®ÇϰÚÁö¿ä. ±×·² ¶§¿¡´Â addConfig() ¸Þ¼Òµå¸¦ »ç¿ëÇÕ´Ï´Ù.±âº»ÀûÀÎ »ç¿ë¹ýÀº, ¿ì¼± Zend_Config ȣȯÀÇ ¼³Á¤À» ÀÛ¼ºÇØ, ±×°ÍÀ» Äڵ忡 Àоîµé¿©, ±×¸®°í RewriteRouter ¿¡ °Ç³×ÁÖ´Â °ÍÀÔ´Ï´Ù.


/**
 *  »ùÇÃÀÇ INI  ÆÄÀÏ
 * routes.archive.route = "archive/:year/*"
 * routes.archive.defaults.controller = archive
 * routes.archive.defaults.action = show
 * routes.archive.defaults.year = 2000
 * routes.archive.reqs.year = "d+"
 * 
 * routes.news.type = "Zend_Controller_Router_Route_Static"
 * routes.news.route = "news"
 * routes.news.defaults.controller = "news"
 * routes.news.defaults.action = "list"
 */
$config = new Zend_Config_Ini($file);
$router = new Zend_Controller_Router_Rewrite();
$router->addConfig($config, 'routes');

À§ÀÇ ¿¹¿¡¼­´Â,INI ÆÄÀÏÀÇ 'routes' ¼½¼ÇÀ» »ç¿ëÇÏ°í ·çÆ®¸¦ °áÁ¤Çϵµ·Ï, ¶ó¿ìÅÍ·Î ÁöÁ¤Çϰí ÀÖ½À´Ï´Ù.ÀÌ ¼½¼ÇÀÇ Á¦ÀÏ ·¹º§ÀÇ Å°°¡ ·çÆ®¸í¿¡ ´ëÀÀÇÕ´Ï´Ù. À§ÀÇ ¿¹¶ó¸é 'archive' (¿Í)°ú 'news' ÇÏÁö¸¸ À̰Ϳ¡ ÇØ´çÇÕ´Ï´Ù. ·çÆ®ÀÇ °¢ ¿£Æ®¸®¿¡´Â, ÃÖÀúÇÑ 'route' ¿£Æ®¸®¿Í Çϳª ÀÌ»óÀÇ 'defaults' ¿£Æ®¸®°¡ ÇÊ¿äÇÕ´Ï´Ù.¶Ç, ¿É¼ÇÀ¸·Î Çϳª ÀÌ»óÀÇ 'reqs' ('required' ÀÇ ¾à¾î) µµ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.¿©±â¼­ ÁöÁ¤ÇÑ °ÍÀÌ, °¢°¢ Zend_Controller_Router_Route_Interface ¿ÀºêÁ§Æ®¿¡ ´ëÇÑ Àμö°¡ µË´Ï´Ù.¿É¼ÇÀÇ Å° 'type' (À»)¸¦ »ç¿ëÇϸé, ƯÁ¤ÀÇ ·çÆ®·Î »ç¿ëÇÏ´Â ·çÆ® Ŭ·¡½ºÀÇ ÇüŸ¦ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.µðÆúÆ®¿¡¼­´Â, À̰ÍÀº Zend_Controller_Router_Route µË´Ï´Ù.À§ÀÇ ¿¹¿¡¼­´Â, 'news' ·çÆ®·Î Zend_Controller_Router_Route_Static (À»)¸¦ »ç¿ëÇϵµ·Ï(µíÀÌ) Çϰí ÀÖ½À´Ï´Ù.

7.4.4. Zend_Controller_Response_Http

Zend_Controller_Response_Http (Àº)´Â, HTTP ȯ°æ¿¡¼­ÀÇ »ç¿ë¿¡ ÀûÀýÇÑ ¸®½ºÆù½º ¿ÀºêÁ§Æ®ÀÔ´Ï´Ù. Çì´õÀÇ ¼³Á¤/ Ãëµæ/ ¼Ò°ÅÀÇ ±â´ÉÀÌ ÀÖ½À´Ï´Ù.¶Ç, __toString() ¸Þ¼Òµå¸¦ »ç¿ëÇϰí, ¸®½ºÆù½º º»Ã¼ÀÇ Àü¿¡ ÀüÇì´õ¸¦ Àϰý ¼Û½ÅÇÒ ¼öµµ ÀÖ½À´Ï´Ù.

setHeader() (Àº)´Â, µÎ °³ÀÇ Àμö¸¦ ¹Þ½À´Ï´Ù. ÃÖÃʰ¡ Çì´õÀÇ ÇüÅ·Î, ´ÙÀ½ÀÌ Çì´õÀÇ °ªÀÔ´Ï´Ù.3¹øÂ°ÀÇ ¿É¼ÇÀÇ ÆÄ¶ó¹ÌÅ͸¦ true (À¸)·Î Çϸé, °°Àº ÇüÅÂÀÇ ±âÁ¸ÀÇ Çì´õ¸¦ °­Á¦ÀûÀ¸·Î µ¡¾²±âÇÕ´Ï´Ù.

7.4.5. Zend_Controller_Response_Cli

Zend_Controller_Response_Cli (Àº)´Â, CLI ȯ°æ¿¡¼­ÀÇ »ç¿ë¿¡ ÀûÀýÇÑ ¸®½ºÆù½º ¿ÀºêÁ§Æ®ÀÔ´Ï´Ù. Çì´õÀÇ Ã³¸®µîÀÇ ±â´ÉÀº °¡ÁöÁö ¾Ê°í, __toString() ÇÏÁö¸¸ ±âµ¿µÇ¾úÀ» ¶§¿¡´Â ´Ü¼øÇÏ°Ô º»¹®¸¸À» µ¹·ÁÁÝ´Ï´Ù.