7.9. ÀÌÀüÀÇ ¹öÁ¯À¸·ÎºÎÅÍÀÇ ÀÌÇà

MVC ÄÄÆÛ³ÍÆ®ÀÇ API (Àº)´Â ÀÌÀü°ú´Â º¯°æµÇ¾ú½À´Ï´Ù. ÃʱâÀÇ ¹öÁ¯À¸·ÎºÎÅÍ Zend Framework (À»)¸¦ »ç¿ëÇϰí ÀÖ¾îÁö´Â ºÐÀº, ÀÌÇÏÀÇ °¡ÀÌµå ¶óÀο¡ µû¶ó¼­ ½ºÅ©¸³Æ®¸¦ º¯°æÇØ, »õ·Î¿î ±¸Á¶¿¡ ´ëÀÀ½ÃÄÑ ÁÖ¼¼¿ä.

7.9.1. 0.6.0 (À¸)·ÎºÎÅÍ 0.8.0 ¿¡ÀÇ ÀÌÇà

Àüȸ º¯°æµÈ, °¡Àå ±âº»ÀûÀÎ MVC ÄÄÆÛ³ÍÆ®ÀÇ »ç¿ë¹ýÀº, ±×´ë·Î °°½À´Ï´Ù.


require_once 'Zend/Controller/Front.php';
Zend_Controller_Front::run('/path/to/controllers');

±×·¯³ª, µð·ºÅ丮 ±¸Á¶¸¦ Àç°ËÅäÇØ, ¸î°³ÀÇ ÄÄÆÛ³ÍÆ®°¡ »èÁ¦µÇ¾ú½À´Ï´Ù. ¶Ç, À̸§ÀÌ º¯°æµÇ°Å³ª »õ·Ó°Ô Ãß°¡µÈ °Íµµ ÀÖ½À´Ï´Ù.ÀÌÇÏ¿¡ ±×°ÍµéÀ» Á¤¸®ÇÕ´Ï´Ù.

  • Zend_Controller_Router (Àº)´Â »èÁ¦µÇ¾ú½À´Ï´Ù. ´ë½Å¿¡ rewrite ¶ó¿ìÅ͸¦ »ç¿ëÇØ ÁÖ¼¼¿ä.

  • Zend_Controller_RewriteRouter ÇÏ Zend_Controller_Router_Rewrite (ÀÌ)¶ó´Â À̸§À¸·Î ¹Ù²î¾î, ÀÌ Ã¼Á¦ÀÇ Ç¥ÁØ ¶ó¿ìÅÍ¿¡ °Ý»óµÇ¾ú½À´Ï´Ù. Zend_Controller_Front (Àº)´Â, ƯÈ÷ ´Ù¸¥ ¶ó¿ìÅ͸¦ ÁöÁ¤ÇÏÁö ¾Ê´Â ÇÑ ÀÌ ¶ó¿ìÅ͸¦ µðÆúÆ®·Î »ç¿ëÇÕ´Ï´Ù.

  • rewrite ¶ó¿ìÅÍ·Î »ç¿ëÇÏ´Â, »õ·Î¿î ·çÆ® Ŭ·¡½º°¡ Ãß°¡µÇ¾ú½À´Ï´Ù.À̸§Àº Zend_Controller_Router_Route_Module ÀÔ´Ï´Ù. À̰ÍÀº MVC ±×¸®°í »ç¿ëÇÏ´Â µðÆúÆ®ÀÇ ·çÆ® ¿Ü¿¡, Ç×7.7. ¡¸¸ðµâ·¯ µð·ºÅ丮 ±¸Á¶ÀÇ ±Ô¾àÀÇ »ç¿ë¡¹ (À»)¸¦ ¼­Æ÷Æ®Çϰí ÀÖ½À´Ï´Ù.

  • Zend_Controller_Router_StaticRoute ÇÏ Zend_Controller_Router_Route_Static (ÀÌ)¶ó´Â À̸§À¸·Î ¹Ù²î¾ú½À´Ï´Ù.

  • Zend_Controller_Dispatcher ÇÏ Zend_Controller_Dispatcher_Standard (ÀÌ)¶ó´Â À̸§À¸·Î ¹Ù²î¾ú½À´Ï´Ù.

  • Zend_Controller_Action::_forward() ÀÇ Àμö°¡ ¹Ù²î¾ú½À´Ï´Ù. »õ·Î¿î ¼­¸íÀº ´ÙÀ½°ú °°½À´Ï´Ù.

    final protected function _forward($action, $controller = null, $module = null, array $params = null);
    

    $action (Àº)´Â Ç×»ó ÇʼöÀÔ´Ï´Ù. ÄÜÆ®·Ñ·¯¸¦ ÁöÁ¤ÇÏÁö ¾Ê¾Ò´ø °æ¿ì´Â, ÇöÀçÀÇ ÄÜÆ®·Ñ·¯³»ÀÇ ¾×¼ÇÀÌ´Ù°í º¸ÀÔ´Ï´Ù. $controller (À»)¸¦ ÁöÁ¤ÇÏÁö ¾Ê¾Ò´ø °æ¿ì´Â, $module (Àº)´Â Ç×»ó ¹«½ÃµË´Ï´Ù. ¸¶Áö¸·À¸·Î,$params ±×¸®°í ÁöÁ¤ÇÑ ÀÓÀÇÀÇ °ªÀÌ ¸®Äù½ºÆ® ¿ÀºêÁ§Æ®¿¡ Ãß°¡µË´Ï´Ù. ÄÜÆ®·Ñ·¯³ª ¸ðµâÀº ºÒÇÊ¿äÇÏÁö¸¸ ÆÄ¶ó¹ÌÅÍ´Â °Ç³×ÁÖ°í ½Í´Ù°í ÇÏ´Â °æ¿ì´Â, ÄÜÆ®·Ñ·¯³ª ¸ðµâ¿¡ null (À»)¸¦ ÁöÁ¤ÇÕ´Ï´Ù.

7.9.2. 0.2.0 ÀÌÀüÀÇ ¹öÁ¯À¸·ÎºÎÅÍ 0.6.0 ¿¡ÀÇ ÀÌÇà

MVC ÄÄÆÛ³ÍÆ®ÀÇ ±âº»ÀûÀÎ ºÎºÐÀº º¯ÇÏÁö ¾Ê½À´Ï´Ù. ´ÙÀ½ÀÇ ¾î´À ¹æ¹ýµµ »ç¿ë °¡´ÉÇÕ´Ï´Ù.


require_once 'Zend/Controller/Front.php';
Zend_Controller_Front::run('/path/to/controllers');

/* -- 
¶ó¿ìÅ͸¦ ÀÛ¼ºÇÕ´Ï´Ù -- */
$router = new Zend_Controller_RewriteRouter();
$router->addRoute('user', 'user/:username', array('controller' => 'user',
'action' => 'info'));

/* --  ¶ó¿ìÅ͸¦ ÄÜÆ®·Ñ·¯·Î ¼³Á¤ÇÕ´Ï´Ù -- */
$ctrl = Zend_Controller_Front::getInstance();
$ctrl->setRouter($router);

/* --  ÄÜÆ®·Ñ·¯ÀÇ µð·ºÅ丮¸¦ ¼³Á¤ÇØ, µð½ºÆÌÄ¡ ÇÕ´Ï´Ù -- */
$ctrl->setControllerDirectory('/path/to/controllers');
$ctrl->dispatch();

¸®½ºÆù½º ¿ÀºêÁ§Æ®¸¦ »ç¿ëÇϰí, ÄÁÅÙÃ÷¿Í Çì´õ¸¦ ÃëµæÇÏ´Â °ÍÀ» Ãßõ ÇÕ´Ï´Ù. À̰Ϳ¡ ÀÇÇØ, ¾îÇø®ÄÉÀ̼dz»¿¡¼­ º¸´Ù À¯¿¬ÇÑ Ãâ·Â ¼­½ÄÀÇ º¯È¯ ( ¿¹¸¦ µé¾î XHTML (Àº)´Â ¾Æ´Ï°í JSON (ÀÌ)³ª XML (À»)¸¦ »ç¿ëÇÏ´Â µî) ÇÏÁö¸¸ ÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù. µðÆúÆ®¿¡¼­´Â,dispatch() (Àº)´Â ¸®½ºÆù½ºÀÇ ·»´õ¸µÀ» ½Ç½ÃÇØ, Çì´õ¿Í ·»´õ¸µ µÈ ³»¿ëÀÇ ¾çÂÊ ¸ðµÎ¸¦ ¼Û½ÅÇÕ´Ï´Ù. ÇÁ·±Æ® ÄÜÆ®·Ñ·¯·ÎºÎÅÍ returnResponse() (À»)¸¦ »ç¿ëÇÏ°í ¸®½ºÆù½º¸¦ µ¹·ÁÁÖ¾î, ¸®½ºÆù½ºÀÇ ·»´õ¸µÀ» µ¶ÀÚÀûÀ¸·Î ½Ç½ÃÇÒ ¼öµµ ÀÖ½À´Ï´Ù. Àå·¡ÀÇ ¹öÁ¯ÀÇ ÇÁ·±Æ® ÄÜÆ®·Ñ·¯¿¡¼­´Â, ¸®½ºÆù½º ¿ÀºêÁ§Æ®¿¡ Ãâ·Â ¹öÆÛ¸µÀ» »ç¿ëÇÒ ¿¹Á¤ÀÔ´Ï´Ù.

Áö±Ý±îÁöÀÇ API ¿¡ °¡¼¼ÇØ ¸¹Àº ±â´ÉÀÌ Ãß°¡µÇ°í ÀÖ½À´Ï´Ù. Ãß°¡µÈ ±â´É¿¡ ´ëÇØ¼­´Â ¹®¼­¸¦ ÂüÁ¶ÇØ ÁֽʽÿÀ.

ÃÖ´ëÀÇ º¯°æÁ¡Àº, ¸¹Àº ÄÄÆÛ³ÍÆ®·Î ¼­ºê Ŭ·¡½ºÈ­¿¡ ÀÇÇÑ È®ÀåÀÌ °¡´ÉÇÏ°Ô µÈ °ÍÀÔ´Ï´Ù.ÀÌÇÏ¿¡ Æ÷ÀÎÆ®¸¦ Á¤¸®ÇÕ´Ï´Ù.

  • Zend_Controller_Front::dispatch() (Àº)´Â, µðÆúÆ®·Î ¸®½ºÆù½º ¿ÀºêÁ§Æ®ÀÇ ¿¹¿Ü¸¦ Æ®·¦ ÇÕ´Ï´Ù. ¿¹¿ÜÀÇ ³»¿ëÀº ·»´õ¸µ ÇÏÁö ¾Ê½À´Ï´Ù.À̰Ϳ¡ ÀÇÇØ, ½Ã½ºÅÛ¿¡ ´ëÇÑ ±â¹Ð Á¤º¸°¡ ·»´õ¸µ µÇ¾î ¹ö¸®´Â °ÍÀ» ¸·½À´Ï´Ù. ÀÌ °Åµ¿À» º¯°æÇÏ·Á¸é ¸î°³ÀÇ ¹æ¹ýÀÌ ÀÖ½À´Ï´Ù.

    • ÇÁ·±Æ® ÄÜÆ®·Ñ·¯·Î throwExceptions() (À»)¸¦ ¼³Á¤ÇÕ´Ï´Ù.

      
      $front->throwExceptions(true);
      
    • ¸®½ºÆù½º ¿ÀºêÁ§Æ®·Î renderExceptions() (À»)¸¦ ¼³Á¤ÇÕ´Ï´Ù.

      
      $response->renderExceptions(true);
      $front->setResponse($response);
      $front->dispatch();

      //  ȤÀº
      $front->returnResponse(true);
      $response = $front->dispatch();
      $response->renderExceptions(true);
      echo $response;
  • Zend_Controller_Dispatcher_Interface::dispatch() (Àº)´Â, µð½ºÆÖÃÄ ÅäÅ«Àº ¾Æ´Ï°í Ç×7.1.2. ¡¸¸®Äù½ºÆ® ¿ÀºêÁ§Æ®¡¹ ¿ÀºêÁ§Æ®¸¦ »ç¿ëÇÏ°Ô µÇ¾ú½À´Ï´Ù.

  • Zend_Controller_Router_Interface::route() (Àº)´Â, µð½ºÆÖÃÄ ÅäÅ«Àº ¾Æ´Ï°í Ç×7.1.2. ¡¸¸®Äù½ºÆ® ¿ÀºêÁ§Æ®¡¹ ¿ÀºêÁ§Æ®¸¦ »ç¿ëÇÏ°Ô µÇ¾ú½À´Ï´Ù.

  • Zend_Controller_Action ÀÇ º¯°æÁ¡Àº ÀÌÇÏ¿Í °°ÀÌ µË´Ï´Ù.

    • constructor¡¡ ¡¡ ÀÌ ¹Þ¾ÆµéÀÌ´Â Àμö´Â Zend_Controller_Request_Abstract $request , Zend_Controller_Response_Abstract $response ¹× array $params (optional) ÀÇ ¼¼ °³°¡ µÇ¾ú½À´Ï´Ù. Zend_Controller_Action::__construct() (Àº)´Â, À̰͵éÀ» »ç¿ëÇØ ¸®Äù½ºÆ®³ª ¸®½ºÆù½º, ±×¸®°í ¿ÀºêÁ§Æ®ÀÇ invokeArgs ÇÁ·ÓÆÛƼ¸¦ ÁöÁ¤ÇÕ´Ï´Ù. constructor¡¡ ¡¡ À» ¿À¹ö¶óÀ̵å(override) ÇÏ´Â °ÍÀ¸·Î, ÀÌ °Åµ¿À» ¼Ò¸Á°ú °°ÀÌ º¯°æÇÒ ¼ö ÀÖ½À´Ï´Ù. ÇÑÃþ ´õ ÁÁÀº °Í¿¡,init() ¸Þ¼Òµå¸¦ »ç¿ëÇØ ÀνºÅϽºÀÇ ¼³Á¤À» ÀÚÀ¯·Ó°Ô ½Ç½ÃÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ¸Þ¼Òµå´Â, constructor¡¡ ¡¡ À¸·ÎÀÇ Ã³¸®ÀÇ ¸¶Áö¸·¿¡ ÄÝ µË´Ï´Ù.

    • run() ÇÏ final ¸Þ¼Òµå´Â ¾Æ´Ï°Ô µÇ¾ú½À´Ï´Ù. ±×·¯³ª, ÀÌ ¸Þ¼Òµå´Â ÀÌ¹Ì ÇÁ·±Æ® ÄÜÆ®·Ñ·¯¿¡¼­´Â »ç¿ëµÇÁö ¾Ê½À´Ï´Ù. À̰ÍÀº, Ŭ·¡½º¸¦ ÆäÀÌÁö ÄÜÆ®·Ñ·¯·Î¼­ »ç¿ëÇÏ´Â °æ¿ì¿¡°Ô¸¸ »ç¿ëÇÕ´Ï´Ù. ¿É¼ÇÀÇ Àμö Zend_Controller_Request_Abstract $request ¹× Zend_Controller_Response_Abstract $response (À»)¸¦ ¹Þ½À´Ï´Ù.

    • indexAction() (À»)¸¦ Á¤ÀÇÇÒ ÇÊ¿ä´Â ¾ø¾îÁ³½À´Ï´Ù. ±×·¯³ª, µðÆúÆ®ÀÇ ¾×¼ÇÀ¸·Î¼­ Á¤ÀÇÇØ µÎ´Â °ÍÀ» Ãßõ ÇÕ´Ï´Ù. À̰Ϳ¡ ÀÇÇØ,RewriteRouter (¿Í)°ú ¾×¼Ç ÄÜÆ®·Ñ·¯·Î µðÆúÆ®ÀÇ ¾×¼Ç ¸Þ¼Òµå¸¦ µû·Î µû·Î ÁöÁ¤ÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù.

    • __call() (À»)¸¦ ¿À¹ö¶óÀ̵å(override) Çϰí, ¹ÌÁ¤µµ¸®ÀÇ ¾×¼ÇÀÌ ÀÚµ¿ÀûÀ¸·Î 󸮵ǵµ·Ï(µíÀÌ) ÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.

    • _redirect() ¿¡´Â ¿É¼ÇÀ¸·Î µÎ¹øÂ°, 3¹øÂ°ÀÇ Àμö°¡ Ãß°¡µÇ¾ú½À´Ï´Ù. µÎ¹øÂ°ÀÇ Àμö´Â ¸®µð·ºÆ®½Ã¿¡ µ¹·ÁÁØ´Ù HTTP ÄÚµåÀÔ´Ï´Ù. 3¹øÂ°ÀÇ Àμö $prependBase (À»)¸¦ »ç¿ëÇϸé, ¸®Äù½ºÆ® ¿ÀºêÁ§Æ®¿¡ µî·ÏÇÑ º£À̽º URL (À»)¸¦ URL ÀÇ Àü¿¡ ¿¬°áÇÏ´Â °ÍÀ» Áö½ÃÇÒ ¼ö ÀÖ½À´Ï´Ù.

    • ÇÁ·ÓÆÛƼ _action (Àº)´Â ¼³Á¤µÇÁö ¾Ê°Ô µÇ¾ú½À´Ï´Ù. ÀÌ ÇÁ·ÓÆÛƼÀÇ ³»¿ëÀº Zend_Controller_Dispatcher_Token (À̾ú)¿´Áö¸¸, À̰ÍÀº ÇöÀçÀÇ ¹öÁ¯¿¡´Â ´õÀÌ»ó Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù. ÅäÅ«ÀÇ À¯ÀÏÇÑ ¸ñÀûÀº, ¿ä±¸µÈ ÄÜÆ®·Ñ·¯³ª ¾×¼Ç, URL ÆÄ¶ó¹ÌÅÍ¿¡ ´ëÇÑ Á¤º¸¸¦ Á¦°øÇÏ´Â °ÍÀ̾ú½À´Ï´Ù. À̰͵éÀº ÇöÀç´Â ¸®Äù½ºÆ® ¿ÀºêÁ§Æ®·ÎºÎÅÍ ´ÙÀ½°ú °°ÀÌ Çϰí ÃëµæÇÒ ¼ö ÀÖ°Ô µÇ¾î ÀÖ½À´Ï´Ù.

      
      // 
      ¿ä±¸µÈ ÄÜÆ®·Ñ·¯¸íÀ» ÃëµæÇÕ´Ï´Ù.
      //  ±× ¶§¿¡´Â $this->_action->getControllerName()  (À»)¸¦ »ç¿ëÇÕ´Ï´Ù.
      //  ÀÌÇÏÀÇ ¿¹¿¡¼­´Â getRequest()  (À»)¸¦ »ç¿ëÇϰí ÀÖ½À´Ï´Ù¸¸, Á÷Á¢ $_request  ÇÁ·ÓÆÛƼ¿¡
      //  ¾×¼¼½º ÇØµµ ±¦Âú½À´Ï´Ù.´ÜÁö getRequest()  (À»)¸¦ »ç¿ëÇÏ´Â °ÍÀ» Ãßõ ÇÕ´Ï´Ù.
      //  ¹¯´Â ÀÖ¾î °ÍÀº, ģŬ·¡½º°¡ ÀÌ ¸Þ¼Òµå¸¦ ¿À¹ö¶óÀ̵å(override) ÇØ °Åµ¿À» º¯°æÇϰí ÀÖÀ»Áöµµ ¸ð¸£±â ¶§¹®ÀÔ´Ï´Ù.
      $controller = $this->getRequest()->getControllerName();

      //  ¿ä±¸µÈ ¾×¼Ç¸íÀ» ÃëµæÇÕ´Ï´Ù.
      //  ±× ¶§¿¡´Â $this->_action->getActionName()  (À»)¸¦ »ç¿ëÇÕ´Ï´Ù.
      $action = $this->getRequest()->getActionName();

      //  ¸®Äù½ºÆ® ÆÄ¶ó¹ÌÅ͸¦ ÃëµæÇÕ´Ï´Ù.
      //  À̰ÍÀº º¯ÇÏÁö ¾Ê½À´Ï´Ù._getParams()  ¸Þ¼Òµå ¹× _getParam()  ¸Þ¼Òµå´Â
      //  ÇöÀç´Â ´Ü¼øÇÑ ¸®Äù½ºÆ® ¿ÀºêÁ§Æ®¿¡ÀÇ ÇÁ·Ï½ÃÀÔ´Ï´Ù.
      $params = $this->_getParams();
      $foo = $this->_getParam('foo', 'default'); //  ÆÄ¶ó¹ÌÅÍ 'foo'  (À»)¸¦ ÃëµæÇÕ´Ï´Ù.¹ß°ßµÇÁö ¾Ê¾Ò´ø °æ¿ì´Â
                                                 //  µðÆúƮġ 'default'  (À»)¸¦ ¼³Á¤ÇÕ´Ï´Ù.
    • noRouteAction() (Àº)´Â »èÁ¦µÇ¾ú½À´Ï´Ù. Á¸ÀçÇÏÁö ¾Ê´Â ¾×¼Ç ¸Þ¼Òµå¸¦ Ãë±ÞÇÏ·Á¸é , __call() (À»)¸¦ »ç¿ëÇØ µðÆúÆ®ÀÇ ¾×¼Ç¿¡ À¯µµÇÕ´Ï´Ù.

      
      public function __call($method, $args)
      {
          //  Á¸ÀçÇÏÁö ¾Ê´Â´Ù 'Action'  ¸Þ¼Òµå°¡ ¿ä±¸µÇ¾úÀ» °æ¿ì¿¡,
          //  ±×°ÍÀ» µðÆúÆ®ÀÇ ¾×¼Ç¿¡ °Ç³×ÁÝ´Ï´Ù.
          if ('Action' == substr($method, -6)) {
              return $this->defaultAction();
          }
          
          throw new Zend_Controller_Exception(' ¹«È¿ÀÎ ¸Þ¼Òµå È£ÃâÀÔ´Ï´Ù');
      }
  • Zend_Controller_RewriteRouter::setRewriteBase() (Àº)´Â »èÁ¦µÇ¾ú½À´Ï´Ù.´ë½Å¿¡ Zend_Controller_Front::setBaseUrl() (À»)¸¦ »ç¿ëÇØ ÁÖ¼¼¿ä ( ȤÀº, ¸®Äù½ºÆ® Ŭ·¡½º¸¦ »ç¿ëÇϰí ÀÖ´Â °æ¿ì´Â Zend_Controller_Request_Http::setBaseUrl() (À»)¸¦ »ç¿ëÇÕ´Ï´Ù) .

  • Zend_Controller_Plugin_Interface ÇÏ Zend_Controller_Plugin_Abstract (À¸)·Î ¿Å°ÜÁ³½À´Ï´Ù. ¸ðµç ¸Þ¼Òµå´Â, µð½ºÆÖÃÄ ÅäÅ«Àº ¾Æ´Ï°í Ç×7.1.2. ¡¸¸®Äù½ºÆ® ¿ÀºêÁ§Æ®¡¹ (À»)¸¦ ±³È¯ÇÏ°Ô µÇ¾ú½À´Ï´Ù.