当前位置:首页 > CMS教程 > 其它CMS > 列表

Zend Framework动作助手Redirector用法实例详解

发布:smiling 来源: PHP粉丝网  添加日期:2021-07-13 14:53:08 浏览: 评论:0 

本文实例讲述了Zend Framework动作助手Redirector用法,分享给大家供大家参考,具体如下:

Redirector 提供另一种实现方式,帮助程序重定向到内部或者外部页面;

转向器(Redirector)助手让你使用一个转向器对象帮助程序重定向到新的URL。与_redirect()方法相比,它具有多项优势。例如能够在转向器对象中预先配置整个站点的行为,或者使用与Zend_Controller_Action::_forward()相似的gotoSimple($action, $controller, $module, $params)接口。

转向器拥有影响重定向行为的大量方法:

setCode() 设置重定向过程中使用的HTTP响应码。

setExit() 在重定向后强制执行exit()方法。默认已设定。

setGotoSimple()设置默认的URL,当没有提供参数给gotoSimple()方法时转向该URL。可以使用类似Zend_Controller_Action::_forward()的API:setGotoSimple($action, $controller = null, $module = null, array $params = array());

setGotoRoute()设置基于一个注册路由器的URL,通过传入一个键/值数组和一个路由器名,它将根据路由器的类型和定义来组织URL。

setGotoUrl()设置默认的URL,当没有参数传入gotoUrl(),将使用该URL,接受单个URL字符串。

setPrependBase()在setGotoUrl()、gotoUrl()或者gotoUrlAndExit()指定的URL前面,加入请求对象的基地址(base URL)。

setUseAbsoluteUri()强制转向器在重定向时使用绝对的URI。当该选项设定后,将使用$_SERVER['HTTP_HOST']、 $_SERVER['SERVER_PORT']和 $_SERVER['HTTPS']以及重定向方法指定的URL,来形成一个完整的URI。该选项目前默认关闭,将来的版本可能会默认开启。

此外,转向器中还有大量方法来执行实际的重定向。

gotoSimple()使用setGotoSimple()(类似_forward()的API)来构建URL并执行重定向。

gotoRoute()使用setGotoRoute()(路由组装route-assembly)来构建URL并执行重定向。

gotoUrl()使用setGotoUrl() URL字符串)来构造URL并执行重定向。

最后,你可以在任何时刻使用getRedirectUrl()确定当前的重定向URL。

基础用例

Example #5 设定选项

这个例子改变了几个选项,包括设定重定向时使用的HTTP状态码为303,重定向时不默认退出,以及定义了默认的URL供重定向使用。

  1. class SomeController extends Zend_Controller_Action 
  2. { 
  3.   /** 
  4.    * Redirector - defined for code completion 
  5.    * 
  6.    * @var Zend_Controller_Action_Helper_Redirector 
  7.    */ 
  8.   protected $_redirector = null; 
  9.   public function init() 
  10.   { 
  11.     $this->_redirector = $this->_helper->getHelper('Redirector'); 
  12.     // Set the default options for the redirector 
  13.     // Since the object is registered in the helper broker, these 
  14.     // become relevant for all actions from this point forward 
  15.     $this->_redirector->setCode(303) 
  16.              ->setExit(false) 
  17.              ->setGotoSimple("this-action", 
  18.                      "some-controller"); 
  19.   } 
  20.   public function myAction() 
  21.   { 
  22.     /* do some stuff */ 
  23.     // Redirect to a previously registered URL, and force an exit 
  24.     // to occur when done: 
  25.     $this->_redirector->redirectAndExit(); 
  26.     return; // never reached 
  27.   } 
  28. } 

Example #6 使用默认设定

这个例子假定使用默认设定,也就意味着任何重定向将导致立即退出。

  1. // ALTERNATIVE EXAMPLE 
  2. class AlternativeController extends Zend_Controller_Action 
  3. { 
  4.   /** 
  5.    * Redirector - defined for code completion 
  6.    * 
  7.    * @var Zend_Controller_Action_Helper_Redirector 
  8.    */ 
  9.   protected $_redirector = null; 
  10.   public function init() 
  11.   { 
  12.     $this->_redirector = $this->_helper->getHelper('Redirector'); 
  13.   } 
  14.   public function myAction() 
  15.   { 
  16.     /* do some stuff */ 
  17.     $this->_redirector 
  18.       ->gotoUrl('/my-controller/my-action/param1/test/param2/test2'); 
  19.     return; // never reached since default is to goto and exit 
  20.   } 
  21. } 

Example #7 使用goto()的_forward()API

gotoSimple()'s API 模拟了Zend_Controller_Action::_forward()。主要的不同在于它通过传入的参数构造URL,使用默认路由器的默认格式:module/:controller/:action/*。然后重定向而不是继续动作链循环。

  1. class ForwardController extends Zend_Controller_Action 
  2. { 
  3.   /** 
  4.    * Redirector - defined for code completion 
  5.    * 
  6.    * @var Zend_Controller_Action_Helper_Redirector 
  7.    */ 
  8.   protected $_redirector = null; 
  9.   public function init() 
  10.   { 
  11.     $this->_redirector = $this->_helper->getHelper('Redirector'); 
  12.   } 
  13.   public function myAction() 
  14.   { 
  15.     /* do some stuff */ 
  16.     // Redirect to 'my-action' of 'my-controller' in the current 
  17.     // module, using the params param1 => test and param2 => test2 
  18.     $this->_redirector->gotoSimple('my-action', 
  19.     'my-controller', 
  20.     null, 
  21.     array('param1' => 'test', 
  22.        'param2' => 'test2' 
  23.        ) 
  24.     ); 
  25.   } 
  26. } 

Example #8 通过gotoRoute()使用路由组装(route assembly)

下面的例子使用了路由器的assemble()方法,基于传入参数的关联数组来创建URL,假定下面的路由已经注册:

  1. $route = new Zend_Controller_Router_Route( 
  2.   'blog/:year/:month/:day/:id', 
  3.   array('controller' => 'archive', 
  4.      'module' => 'blog', 
  5.      'action' => 'view') 
  6. ); 
  7. $router->addRoute('blogArchive', $route); 

给定一个数组,其中年份为2006,月份为4,日期为24,id为42,据此可以组装URL/blog/2006/4/24/42。

  1. class BlogAdminController extends Zend_Controller_Action 
  2. { 
  3.   /** 
  4.    * Redirector - defined for code completion 
  5.    * 
  6.    * @var Zend_Controller_Action_Helper_Redirector 
  7.    */ 
  8.   protected $_redirector = null; 
  9.   public function init() 
  10.   { 
  11.     $this->_redirector = $this->_helper->getHelper('Redirector'); 
  12.   } 
  13.   public function returnAction() 
  14.   { 
  15.     /* do some stuff */ 
  16.     // Redirect to blog archive. Builds the following URL: 
  17.     // /blog/2006/4/24/42 
  18.     $this->_redirector->gotoRoute( 
  19.       array('year' => 2006, 
  20.          'month' => 4, 
  21.          'day' => 24, 
  22.          'id' => 42), 
  23.       'blogArchive' 
  24.     ); 
  25.   } 
  26. } 

Zend_Controller_Action_Helper_Redirector的源码。

通过源代码不难看出实现方法,以及常见的使用方法。

  1. <?php 
  2. /** 
  3.  * @see Zend_Controller_Action_Helper_Abstract 
  4.  */ 
  5. require_once 'Zend/Controller/Action/Helper/Abstract.php'; 
  6. /** 
  7.  * @category  Zend 
  8.  * @package  Zend_Controller 
  9.  * @subpackage Zend_Controller_Action_Helper 
  10.  * @copyright Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com) 
  11.  * @license  http://framework.zend.com/license/new-bsd   New BSD License 
  12.  */ 
  13. class Zend_Controller_Action_Helper_Redirector extends Zend_Controller_Action_Helper_Abstract 
  14. { 
  15.   /** 
  16.    * HTTP status code for redirects 
  17.    * @var int 
  18.    */ 
  19.   protected $_code = 302; 
  20.   /** 
  21.    * Whether or not calls to _redirect() should exit script execution 
  22.    * @var boolean 
  23.    */ 
  24.   protected $_exit = true; 
  25.   /** 
  26.    * Whether or not _redirect() should attempt to prepend the base URL to the 
  27.    * passed URL (if it's a relative URL) 
  28.    * @var boolean 
  29.    */ 
  30.   protected $_prependBase = true; 
  31.   /** 
  32.    * Url to which to redirect 
  33.    * @var string 
  34.    */ 
  35.   protected $_redirectUrl = null; 
  36.   /** 
  37.    * Whether or not to use an absolute URI when redirecting 
  38.    * @var boolean 
  39.    */ 
  40.   protected $_useAbsoluteUri = false; 
  41.   /** 
  42.    * Whether or not to close the session before exiting 
  43.    * @var boolean 
  44.    */ 
  45.   protected $_closeSessionOnExit = true; 
  46.   /** 
  47.    * Retrieve HTTP status code to emit on {@link _redirect()} call 
  48.    * 
  49.    * @return int 
  50.    */ 
  51.   public function getCode() 
  52.   { 
  53.     return $this->_code; 
  54.   } 
  55.   /** 
  56.    * Validate HTTP status redirect code 
  57.    * 
  58.    * @param int $code 
  59.    * @throws Zend_Controller_Action_Exception on invalid HTTP status code 
  60.    * @return true 
  61.    */ 
  62.   protected function _checkCode($code) 
  63.   { 
  64.     $code = (int)$code; 
  65.     if ((300 > $code) || (307 < $code) || (304 == $code) || (306 == $code)) { 
  66.       require_once 'Zend/Controller/Action/Exception.php'; 
  67.       throw new Zend_Controller_Action_Exception('Invalid redirect HTTP status code (' . $code . ')'); 
  68.     } 
  69.     return true; 
  70.   } 
  71.   /** 
  72.    * Retrieve HTTP status code for {@link _redirect()} behaviour 
  73.    * 
  74.    * @param int $code 
  75.    * @return Zend_Controller_Action_Helper_Redirector Provides a fluent interface 
  76.    */ 
  77.   public function setCode($code) 
  78.   { 
  79.     $this->_checkCode($code); 
  80.     $this->_code = $code; 
  81.     return $this; 
  82.   } 
  83.   /** 
  84.    * Retrieve flag for whether or not {@link _redirect()} will exit when finished. 
  85.    * 
  86.    * @return boolean 
  87.    */ 
  88.   public function getExit() 
  89.   { 
  90.     return $this->_exit; 
  91.   } 
  92.   /** 
  93.    * Retrieve exit flag for {@link _redirect()} behaviour 
  94.    * 
  95.    * @param boolean $flag 
  96.    * @return Zend_Controller_Action_Helper_Redirector Provides a fluent interface 
  97.    */ 
  98.   public function setExit($flag) 
  99.   { 
  100.     $this->_exit = ($flag) ? true : false; 
  101.     return $this; 
  102.   } 
  103.   /** 
  104.    * Retrieve flag for whether or not {@link _redirect()} will prepend the 
  105.    * base URL on relative URLs 
  106.    * 
  107.    * @return boolean 
  108.    */ 
  109.   public function getPrependBase() 
  110.   { 
  111.     return $this->_prependBase; 
  112.   } 
  113.   /** 
  114.    * Retrieve 'prepend base' flag for {@link _redirect()} behaviour 
  115.    * 
  116.    * @param boolean $flag 
  117.    * @return Zend_Controller_Action_Helper_Redirector Provides a fluent interface 
  118.    */ 
  119.   public function setPrependBase($flag) 
  120.   { 
  121.     $this->_prependBase = ($flag) ? true : false; 
  122.     return $this; 
  123.   } 
  124.   /** 
  125.    * Retrieve flag for whether or not {@link redirectAndExit()} shall close the session before 
  126.    * exiting. 
  127.    * 
  128.    * @return boolean 
  129.    */ 
  130.   public function getCloseSessionOnExit() 
  131.   { 
  132.     return $this->_closeSessionOnExit; 
  133.   } 
  134.   /** 
  135.    * Set flag for whether or not {@link redirectAndExit()} shall close the session before exiting. 
  136.    * 
  137.    * @param boolean $flag 
  138.    * @return Zend_Controller_Action_Helper_Redirector Provides a fluent interface 
  139.    */ 
  140.   public function setCloseSessionOnExit($flag) 
  141.   { 
  142.     $this->_closeSessionOnExit = ($flag) ? true : false; 
  143.     return $this; 
  144.   } 
  145.   /** 
  146.    * Return use absolute URI flag 
  147.    * 
  148.    * @return boolean 
  149.    */ 
  150.   public function getUseAbsoluteUri() 
  151.   { 
  152.     return $this->_useAbsoluteUri; 
  153.   } 
  154.   /** 
  155.    * Set use absolute URI flag 
  156.    * 
  157.    * @param boolean $flag 
  158.    * @return Zend_Controller_Action_Helper_Redirector Provides a fluent interface 
  159.    */ 
  160.   public function setUseAbsoluteUri($flag = true) 
  161.   { 
  162.     $this->_useAbsoluteUri = ($flag) ? true : false; 
  163.     return $this; 
  164.   } 
  165.   /** 
  166.    * Set redirect in response object 
  167.    * 
  168.    * @return void 
  169.    */ 
  170.   protected function _redirect($url) 
  171.   { 
  172.     if ($this->getUseAbsoluteUri() && !preg_match('#^(https?|ftp)://#', $url)) { 
  173.       $host = (isset($_SERVER['HTTP_HOST'])?$_SERVER['HTTP_HOST']:''); 
  174.       $proto = (isset($_SERVER['HTTPS'])&&$_SERVER['HTTPS']!=="off") ? 'https' : 'http'; 
  175.       $port = (isset($_SERVER['SERVER_PORT'])?$_SERVER['SERVER_PORT']:80); 
  176.       $uri  = $proto . '://' . $host; 
  177.       if ((('http' == $proto) && (80 != $port)) || (('https' == $proto) && (443 != $port))) { 
  178.         // do not append if HTTP_HOST already contains port 
  179.         if (strrchr($host, ':') === false) { 
  180.           $uri .= ':' . $port; 
  181.         } 
  182.       } 
  183.       $url = $uri . '/' . ltrim($url, '/'); 
  184.     } 
  185.     $this->_redirectUrl = $url; 
  186.     $this->getResponse()->setRedirect($url, $this->getCode()); 
  187.   } 
  188.   /** 
  189.    * Retrieve currently set URL for redirect 
  190.    * 
  191.    * @return string 
  192.    */ 
  193.   public function getRedirectUrl() 
  194.   { 
  195.     return $this->_redirectUrl; 
  196.   } 
  197.   /** 
  198.    * Determine if the baseUrl should be prepended, and prepend if necessary 
  199.    * 
  200.    * @param string $url 
  201.    * @return string 
  202.    */ 
  203.   protected function _prependBase($url) 
  204.   { 
  205.     if ($this->getPrependBase()) { 
  206.       $request = $this->getRequest(); 
  207.       if ($request instanceof Zend_Controller_Request_Http) { 
  208.         $base = rtrim($request->getBaseUrl(), '/'); 
  209.         if (!emptyempty($base) && ('/' != $base)) { 
  210.           $url = $base . '/' . ltrim($url, '/'); 
  211.         } else { 
  212.           $url = '/' . ltrim($url, '/'); 
  213.         } 
  214.       } 
  215.     } 
  216.     return $url; 
  217.   } 
  218.   /** 
  219.    * Set a redirect URL of the form /module/controller/action/params 
  220.    * 
  221.    * @param string $action 
  222.    * @param string $controller 
  223.    * @param string $module 
  224.    * @param array $params 
  225.    * @return void 
  226.    */ 
  227.   public function setGotoSimple($action, $controller = null, $module = null, array $params = array()) 
  228.   { 
  229.     $dispatcher = $this->getFrontController()->getDispatcher(); 
  230.     $request  = $this->getRequest(); 
  231.     $curModule = $request->getModuleName(); 
  232.     $useDefaultController = false; 
  233.     if (null === $controller && null !== $module) { 
  234.       $useDefaultController = true; 
  235.     } 
  236.     if (null === $module) { 
  237.       $module = $curModule; 
  238.     } 
  239.     if ($module == $dispatcher->getDefaultModule()) { 
  240.       $module = ''; 
  241.     } 
  242.     if (null === $controller && !$useDefaultController) { 
  243.       $controller = $request->getControllerName(); 
  244.       if (emptyempty($controller)) { 
  245.         $controller = $dispatcher->getDefaultControllerName(); 
  246.       } 
  247.     } 
  248.     $params[$request->getModuleKey()]   = $module; 
  249.     $params[$request->getControllerKey()] = $controller; 
  250.     $params[$request->getActionKey()]   = $action; 
  251.     $router = $this->getFrontController()->getRouter(); 
  252.     $url  = $router->assemble($params, 'default', true); 
  253.     $this->_redirect($url); 
  254.   } 
  255.   /** 
  256.    * Build a URL based on a route 
  257.    * 
  258.    * @param array  $urlOptions 
  259.    * @param string $name Route name 
  260.    * @param boolean $reset 
  261.    * @param boolean $encode 
  262.    * @return void 
  263.    */ 
  264.   public function setGotoRoute(array $urlOptions = array(), $name = null, $reset = false, $encode = true) 
  265.   { 
  266.     $router = $this->getFrontController()->getRouter(); 
  267.     $url  = $router->assemble($urlOptions, $name, $reset, $encode); 
  268.     $this->_redirect($url); 
  269.   } 
  270.   /** 
  271.    * Set a redirect URL string 
  272.    * 
  273.    * By default, emits a 302 HTTP status header, prepends base URL as defined 
  274.    * in request object if url is relative, and halts script execution by 
  275.    * calling exit(). 
  276.    * 
  277.    * $options is an optional associative array that can be used to control 
  278.    * redirect behaviour. The available option keys are: 
  279.    * - exit: boolean flag indicating whether or not to halt script execution when done 
  280.    * - prependBase: boolean flag indicating whether or not to prepend the base URL when a relative URL is provided 
  281.    * - code: integer HTTP status code to use with redirect. Should be between 300 and 307. 
  282.    * 
  283.    * _redirect() sets the Location header in the response object. If you set 
  284.    * the exit flag to false, you can override this header later in code 
  285.    * execution. 
  286.    * 
  287.    * If the exit flag is true (true by default), _redirect() will write and 
  288.    * close the current session, if any. 
  289.    * 
  290.    * @param string $url 
  291.    * @param array $options 
  292.    * @return void 
  293.    */ 
  294.   public function setGotoUrl($url, array $options = array()) 
  295.   { 
  296.     // prevent header injections 
  297.     $url = str_replace(array("\n", "\r"), '', $url); 
  298.     if (null !== $options) { 
  299.       if (isset($options['exit'])) { 
  300.         $this->setExit(($options['exit']) ? true : false); 
  301.       } 
  302.       if (isset($options['prependBase'])) { 
  303.         $this->setPrependBase(($options['prependBase']) ? true : false); 
  304.       } 
  305.       if (isset($options['code'])) { 
  306.         $this->setCode($options['code']); 
  307.       } 
  308.     } 
  309.     // If relative URL, decide if we should prepend base URL 
  310.     if (!preg_match('|^[a-z]+://|', $url)) { 
  311.       $url = $this->_prependBase($url); 
  312.     } 
  313.     $this->_redirect($url); 
  314.   } 
  315.   /** 
  316.    * Perform a redirect to an action/controller/module with params 
  317.    * 
  318.    * @param string $action 
  319.    * @param string $controller 
  320.    * @param string $module 
  321.    * @param array $params 
  322.    * @return void 
  323.    */ 
  324.   public function gotoSimple($action, $controller = null, $module = null, array $params = array()) 
  325.   { 
  326.     $this->setGotoSimple($action, $controller, $module, $params); 
  327.     if ($this->getExit()) { 
  328.       $this->redirectAndExit(); 
  329.     } 
  330.   } 
  331.   /** 
  332.    * Perform a redirect to an action/controller/module with params, forcing an immdiate exit 
  333.    * 
  334.    * @param mixed $action 
  335.    * @param mixed $controller 
  336.    * @param mixed $module 
  337.    * @param array $params 
  338.    * @return void 
  339.    */ 
  340.   public function gotoSimpleAndExit($action, $controller = null, $module = null, array $params = array()) 
  341.   { 
  342.     $this->setGotoSimple($action, $controller, $module, $params); 
  343.     $this->redirectAndExit(); 
  344.   } 
  345.   /** 
  346.    * Redirect to a route-based URL 
  347.    * 
  348.    * Uses route's assemble method tobuild the URL; route is specified by $name; 
  349.    * default route is used if none provided. 
  350.    * 
  351.    * @param array  $urlOptions Array of key/value pairs used to assemble URL 
  352.    * @param string $name 
  353.    * @param boolean $reset 
  354.    * @param boolean $encode 
  355.    * @return void 
  356.    */ 
  357.   public function gotoRoute(array $urlOptions = array(), $name = null, $reset = false, $encode = true) 
  358.   { 
  359.     $this->setGotoRoute($urlOptions, $name, $reset, $encode); 
  360.     if ($this->getExit()) { 
  361.       $this->redirectAndExit(); 
  362.     } 
  363.   } 
  364.   /** 
  365.    * Redirect to a route-based URL, and immediately exit 
  366.    * 
  367.    * Uses route's assemble method tobuild the URL; route is specified by $name; 
  368.    * default route is used if none provided. 
  369.    * 
  370.    * @param array  $urlOptions Array of key/value pairs used to assemble URL 
  371.    * @param string $name 
  372.    * @param boolean $reset 
  373.    * @return void 
  374.    */ 
  375.   public function gotoRouteAndExit(array $urlOptions = array(), $name = null, $reset = false) 
  376.   { 
  377.     $this->setGotoRoute($urlOptions, $name, $reset); 
  378.     $this->redirectAndExit(); 
  379.   } 
  380.   /** 
  381.    * Perform a redirect to a url 
  382.    * 
  383.    * @param string $url 
  384.    * @param array $options 
  385.    * @return void 
  386.    */ 
  387.   public function gotoUrl($url, array $options = array()) 
  388.   { 
  389.     $this->setGotoUrl($url, $options); 
  390.     if ($this->getExit()) { 
  391.       $this->redirectAndExit(); 
  392.     } 
  393.   } 
  394.   /** 
  395.    * Set a URL string for a redirect, perform redirect, and immediately exit 
  396.    * 
  397.    * @param string $url 
  398.    * @param array $options 
  399.    * @return void 
  400.    */ 
  401.   public function gotoUrlAndExit($url, array $options = array()) 
  402.   { 
  403.     $this->setGotoUrl($url, $options); 
  404.     $this->redirectAndExit(); 
  405.   } 
  406.   /** 
  407.    * exit(): Perform exit for redirector 
  408.    * 
  409.    * @return void 
  410.    */ 
  411.   public function redirectAndExit() 
  412.   { 
  413.     if ($this->getCloseSessionOnExit()) { 
  414.       // Close session, if started 
  415.       if (class_exists('Zend_Session', false) && Zend_Session::isStarted()) { 
  416.         Zend_Session::writeClose(); 
  417.       } elseif (isset($_SESSION)) { 
  418.         session_write_close(); 
  419.       } 
  420.     } 
  421.     $this->getResponse()->sendHeaders(); 
  422.     exit(); 
  423.   } 
  424.   /** 
  425.    * direct(): Perform helper when called as 
  426.    * $this->_helper->redirector($action, $controller, $module, $params) 
  427.    * 
  428.    * @param string $action 
  429.    * @param string $controller 
  430.    * @param string $module 
  431.    * @param array $params 
  432.    * @return void 
  433.    */ 
  434.   public function direct($action, $controller = null, $module = null, array $params = array()) 
  435.   { 
  436.     $this->gotoSimple($action, $controller, $module, $params); 
  437.   } 
  438.   /** 
  439.    * Overloading 
  440.    * 
  441.    * Overloading for old 'goto', 'setGoto', and 'gotoAndExit' methods 
  442.    * 
  443.    * @param string $method 
  444.    * @param array $args 
  445.    * @return mixed 
  446.    * @throws Zend_Controller_Action_Exception for invalid methods 
  447.    */ 
  448.   public function __call($method, $args) 
  449.   { 
  450.     $method = strtolower($method); 
  451.     if ('goto' == $method) { 
  452.       return call_user_func_array(array($this, 'gotoSimple'), $args); 
  453.     } 
  454.     if ('setgoto' == $method) { 
  455.       return call_user_func_array(array($this, 'setGotoSimple'), $args); 
  456.     } 
  457.     if ('gotoandexit' == $method) { 
  458.       return call_user_func_array(array($this, 'gotoSimpleAndExit'), $args); 
  459.     } 
  460.     require_once 'Zend/Controller/Action/Exception.php'; 
  461.     throw new Zend_Controller_Action_Exception(sprintf('Invalid method "%s" called on redirector', $method)); 
  462.   } 
  463. }

Tags: Framework Redirector

分享到: