コード例 #1
1
ファイル: Router.php プロジェクト: nemphys/magento2
 /**
  * Validate and Match Cms Page and modify request
  *
  * @param Zend_Controller_Request_Http $request
  * @return bool
  *
  * @SuppressWarnings(PHPMD.ExitExpression)
  */
 public function match(Zend_Controller_Request_Http $request)
 {
     if (!Mage::isInstalled()) {
         Mage::app()->getFrontController()->getResponse()->setRedirect(Mage::getUrl('install'))->sendResponse();
         exit;
     }
     $identifier = trim($request->getPathInfo(), '/');
     $condition = new Varien_Object(array('identifier' => $identifier, 'continue' => true));
     Mage::dispatchEvent('cms_controller_router_match_before', array('router' => $this, 'condition' => $condition));
     $identifier = $condition->getIdentifier();
     if ($condition->getRedirectUrl()) {
         Mage::app()->getFrontController()->getResponse()->setRedirect($condition->getRedirectUrl())->sendResponse();
         $request->setDispatched(true);
         return Mage::getControllerInstance('Mage_Core_Controller_Varien_Action_Forward', $request, Mage::app()->getFrontController()->getResponse());
     }
     if (!$condition->getContinue()) {
         return null;
     }
     $page = Mage::getModel('Mage_Cms_Model_Page');
     $pageId = $page->checkIdentifier($identifier, Mage::app()->getStore()->getId());
     if (!$pageId) {
         return null;
     }
     $request->setModuleName('cms')->setControllerName('page')->setActionName('view')->setParam('page_id', $pageId);
     $request->setAlias(Mage_Core_Model_Url_Rewrite::REWRITE_REQUEST_PATH_ALIAS, $identifier);
     return Mage::getControllerInstance('Mage_Core_Controller_Varien_Action_Forward', $request, Mage::app()->getFrontController()->getResponse());
 }
コード例 #2
0
ファイル: ForwardTest.php プロジェクト: nemphys/magento2
 /**
  * Test that Mage_Core_Controller_Varien_Action_Forward::dispatch() does not change dispatched flag
  */
 public function testDispatch()
 {
     $this->_request->setDispatched(true);
     $this->assertTrue($this->_request->isDispatched());
     $this->_object->dispatch('any action');
     $this->assertFalse($this->_request->isDispatched());
 }
コード例 #3
0
ファイル: Router.php プロジェクト: uibar/laviniailies2
 public function match(Zend_Controller_Request_Http $request)
 {
     if (!Mage::isInstalled()) {
         Mage::app()->getFrontController()->getResponse()->setRedirect(Mage::getUrl('install'))->sendResponse();
         exit;
     }
     $identifier = trim($request->getPathInfo(), '/');
     $condition = new Varien_Object(array('identifier' => $identifier, 'continue' => true));
     Mage::dispatchEvent('magicproduct_controller_router_match_before', array('router' => $this, 'condition' => $condition));
     $identifier = $condition->getIdentifier();
     if ($condition->getRedirectUrl()) {
         Mage::app()->getFrontController()->getResponse()->setRedirect($condition->getRedirectUrl())->sendResponse();
         $request->setDispatched(true);
         return true;
     }
     if (!$condition->getContinue()) {
         return false;
     }
     if (!in_array($identifier, $this->router)) {
         return false;
     }
     $request->setModuleName('magicproduct')->setControllerName('index')->setActionName('product')->setParam('type', $identifier);
     $request->setAlias(Mage_Core_Model_Url_Rewrite::REWRITE_REQUEST_PATH_ALIAS, $identifier);
     return true;
 }
コード例 #4
0
ファイル: Router.php プロジェクト: perseusl/kingdavid
 /**
  * Validate and Match Manufacturer Page and modify request
  *
  * @param Zend_Controller_Request_Http $request
  * @return bool
  */
 public function match(Zend_Controller_Request_Http $request)
 {
     if (!Mage::isInstalled()) {
         Mage::app()->getFrontController()->getResponse()->setRedirect(Mage::getUrl('install'))->sendResponse();
         exit;
     }
     $router = 'manufacturers';
     $identifier = trim(str_replace('/manufacturers/', '', $request->getPathInfo()), '/');
     $condition = new Varien_Object(array('identifier' => $identifier, 'continue' => true));
     Mage::dispatchEvent('manufacturer_controller_router_match_before', array('router' => $this, 'condition' => $condition));
     $identifier = $condition->getIdentifier();
     if ($condition->getRedirectUrl()) {
         Mage::app()->getFrontController()->getResponse()->setRedirect($condition->getRedirectUrl())->sendResponse();
         $request->setDispatched(true);
         return true;
     }
     if (!$condition->getContinue()) {
         return false;
     }
     $manufacturer = Mage::getModel('zeon_manufacturer/manufacturer');
     $manufacturerId = $manufacturer->checkIdentifier($identifier, Mage::app()->getStore()->getId());
     if (trim($identifier) && $manufacturerId) {
         $request->setModuleName('manufacturers')->setControllerName('index')->setActionName('view')->setParam('manufacturer_id', $manufacturerId);
         $request->setAlias(Mage_Core_Model_Url_Rewrite::REWRITE_REQUEST_PATH_ALIAS, $router . '/' . $identifier);
         return true;
     }
     return false;
 }
コード例 #5
0
 /**
  * Match the request
  *
  * @param Zend_Controller_Request_Http $request
  * @return boolean
  */
 public function match(Zend_Controller_Request_Http $request)
 {
     //checking before even try to find out that current module
     //should use this router
     if (!$this->_beforeModuleMatch()) {
         return false;
     }
     $front = $this->getFront();
     $path = trim($request->getPathInfo(), '/');
     $p = explode('/', $path);
     if (count($p) == 0 || !$this->_pluarizeName($p[0])) {
         return false;
     } else {
         $module = $this->_pluarizeName($p[0]);
         $modules = $this->getModuleByFrontName($module);
         if ($modules === false) {
             return false;
         }
         // checks after we found out that this router should be used for current module
         if (!$this->_afterModuleMatch()) {
             return false;
         }
         // set values only after all the checks are done
         $request->setModuleName($module);
         $request->setControllerName('index');
         $action = $this->_getActionFromPathInfo($p);
         $request->setActionName($action);
         $realModule = 'Zefir_Dealers';
         $request->setControllerModule($realModule);
         $request->setRouteName('dealers');
         // dispatch action
         $request->setDispatched(true);
         /**
          * Set params for the request
          */
         if ($action == 'view') {
             $request->setParam('dealer_code', $p[1]);
         } else {
             // set parameters from pathinfo
             for ($i = 3, $l = sizeof($p); $i < $l; $i += 2) {
                 $request->setParam($p[$i], isset($p[$i + 1]) ? urldecode($p[$i + 1]) : '');
             }
         }
         // instantiate controller class and dispatch action
         $controllerClassName = $this->_validateControllerClassName($realModule, 'index');
         $controllerInstance = Mage::getControllerInstance($controllerClassName, $request, $front->getResponse());
         $controllerInstance->dispatch($action);
         return true;
     }
 }
コード例 #6
0
ファイル: Router.php プロジェクト: victorkho/telor
 protected function forwardShopby()
 {
     $reservedKey = Mage::getStoreConfig('amshopby/seo/key');
     $realModule = 'Amasty_Shopby';
     $this->request->setPathInfo($reservedKey);
     $this->request->setModuleName('amshopby');
     $this->request->setRouteName('amshopby');
     $this->request->setControllerName('index');
     $this->request->setActionName('index');
     $this->request->setControllerModule($realModule);
     $file = Mage::getModuleDir('controllers', $realModule) . DS . 'IndexController.php';
     include $file;
     //compatibility with 1.3
     $class = $realModule . '_IndexController';
     $controllerInstance = new $class($this->request, $this->getFront()->getResponse());
     $this->request->setDispatched(true);
     $controllerInstance->dispatch('index');
 }
コード例 #7
0
ファイル: Router.php プロジェクト: guohuadeng/aototechweb
 public function match(Zend_Controller_Request_Http $request)
 {
     $identifier = trim($request->getPathInfo(), '/');
     $condition = new Varien_Object(array('identifier' => $identifier, 'continue' => true));
     $identifier = $condition->getIdentifier();
     if ($condition->getRedirectUrl()) {
         Mage::app()->getFrontController()->getResponse()->setRedirect($condition->getRedirectUrl())->sendResponse();
         $request->setDispatched(true);
         return true;
     }
     if (!$condition->getContinue()) {
         return false;
     }
     $page = Mage::getModel('searchlandingpage/page')->checkIdentifier($identifier);
     if (!$page) {
         return false;
     }
     $request->setModuleName('searchlandingpage')->setControllerName('page')->setActionName('view')->setParam('q', $page->getQueryText())->setParam('id', $page->getId());
     $request->setAlias(Mage_Core_Model_Url_Rewrite::REWRITE_REQUEST_PATH_ALIAS, $identifier);
     return true;
 }
コード例 #8
0
ファイル: Router.php プロジェクト: ramantalkin/tmp01skin
 /**
  * Validate and Match Cms Page and modify request
  *
  * @param Zend_Controller_Request_Http $request
  * @return bool
  */
 public function match(Zend_Controller_Request_Http $request)
 {
     if (!Mage::isInstalled()) {
         Mage::app()->getFrontController()->getResponse()->setRedirect(Mage::getUrl('install'))->sendResponse();
         exit;
     }
     $identifier = trim($request->getPathInfo(), '/');
     $condition = new Varien_Object(array('identifier' => $identifier, 'continue' => true));
     if ($condition->getRedirectUrl()) {
         Mage::app()->getFrontController()->getResponse()->setRedirect($condition->getRedirectUrl())->sendResponse();
         $request->setDispatched(true);
         return true;
     }
     if (!$condition->getContinue()) {
         return false;
     }
     if ($identifier != Mage::helper('productquestions')->faqsPageUrlKey()) {
         return false;
     }
     $request->setModuleName('productquestions')->setControllerName('faq')->setActionName('index');
     $request->setAlias(Mage_Core_Model_Url_Rewrite::REWRITE_REQUEST_PATH_ALIAS, $identifier);
     return true;
 }
コード例 #9
0
 /**
  * Validate and Match News and modify request
  *
  * @param Zend_Controller_Request_Http $request
  * @return bool
  */
 public function match(Zend_Controller_Request_Http $request)
 {
     $identifier = trim($request->getPathInfo(), '/');
     $condition = new Varien_Object(array('identifier' => $identifier, 'continue' => true));
     Mage::dispatchEvent('magna_news_controller_router_match_before', array('router' => $this, 'condition' => $condition));
     $identifier = $condition->getIdentifier();
     if ($condition->getRedirectUrl()) {
         Mage::app()->getFrontController()->getResponse()->setRedirect($condition->getRedirectUrl())->sendResponse();
         $request->setDispatched(true);
         return true;
     }
     if (!$condition->getContinue()) {
         return false;
     }
     $news = Mage::getModel('magna_news/news');
     $newsId = $news->checkIdentifier($identifier, Mage::app()->getStore()->getId());
     if (!$newsId) {
         return false;
     }
     $request->setModuleName('magna_news')->setControllerName('view')->setActionName('show')->setParam('news_id', $newsId);
     $request->setAlias(Mage_Core_Model_Url_Rewrite::REWRITE_REQUEST_PATH_ALIAS, $identifier);
     return true;
 }
コード例 #10
0
 /**
  * Validate and Match FAQ Page and modify request
  *
  * @param Zend_Controller_Request_Http $request
  * @return bool
  */
 public function match(Zend_Controller_Request_Http $request)
 {
     if (!Mage::isInstalled()) {
         Mage::app()->getFrontController()->getResponse()->setRedirect(Mage::getUrl('install'))->sendResponse();
         exit;
     }
     $router = 'faq';
     $identifier = trim(str_replace('/faq/', '', $request->getPathInfo()), '/');
     $condition = new Varien_Object(array('identifier' => $identifier, 'continue' => true));
     Mage::dispatchEvent('faq_controller_router_match_before', array('router' => $this, 'condition' => $condition));
     if ($condition->getRedirectUrl()) {
         Mage::app()->getFrontController()->getResponse()->setRedirect($condition->getRedirectUrl())->sendResponse();
         $request->setDispatched(true);
         return true;
     }
     if (!$condition->getContinue()) {
         return false;
     }
     $category = Mage::getModel('zeon_faq/category');
     $categoryId = $category->checkIdentifier($identifier, Mage::app()->getStore()->getId());
     if (!$categoryId && $identifier == 'mfaq') {
         $request->setModuleName('faq')->setControllerName('index')->setActionName('index');
         if (Mage::helper('zeon_faq')->getIsDisplayMfaq()) {
             $request->setParam('mfaq', 1);
         }
         $request->setAlias(Mage_Core_Model_Url_Rewrite::REWRITE_REQUEST_PATH_ALIAS, $router);
         return true;
     } elseif ($categoryId) {
         $request->setModuleName('faq')->setControllerName('index')->setActionName('index')->setParam('category_id', $categoryId);
         $request->setAlias(Mage_Core_Model_Url_Rewrite::REWRITE_REQUEST_PATH_ALIAS, $router . '/' . $identifier);
         return true;
     } else {
         return false;
     }
     return false;
 }
コード例 #11
0
 /**
  * Validate and Match Cms Page and modify request
  *
  * @param Zend_Controller_Request_Http $request
  * @return bool
  */
 public function match(Zend_Controller_Request_Http $request)
 {
     if (Mage::app()->getStore()->isAdmin()) {
         return false;
     }
     $sellerAtttributeName = Mage::getConfig()->getNode('default/seller_page/attribute_name');
     $seoDisplay = Mage::getConfig()->getNode('default/seller_page/seo_display');
     if (empty($sellerAtttributeName)) {
         //Seller attribute not configured
         return false;
     }
     $pageId = $request->getPathInfo();
     $param = explode('/', $pageId);
     $seller = '';
     if (count($param) > 1 and strtolower($param[1]) == $seoDisplay and !empty($param[2])) {
         //Identify Seller
         $sellerPage = $param[2];
         if (strpos($sellerPage, '.') !== false) {
             $sellerPage = urldecode(substr($sellerPage, 0, -5));
             if ($sellerPage) {
                 $seller = str_replace('-', ' ', $sellerPage);
             } else {
                 return false;
             }
         } else {
             $seller = $sellerPage;
         }
     } else {
         return false;
     }
     if ($seller) {
         Mage::register('seller_company', $seller);
         $realModule = 'Cybage_Marketplace';
         $request->setModuleName('marketplace');
         $request->setRouteName('marketplace');
         $request->setControllerName('seller');
         $request->setActionName('sellerinfo');
         $request->setControllerModule($realModule);
         $request->setAlias(Mage_Core_Model_Url_Rewrite::REWRITE_REQUEST_PATH_ALIAS, ltrim($request->getRequestString(), '/'));
         $file = Mage::getModuleDir('controllers', $realModule) . DS . 'SellerController.php';
         include $file;
         //compatibility with 1.3
         $class = $realModule . '_SellerController';
         $controllerInstance = new $class($request, $this->getFront()->getResponse());
         $request->setDispatched(true);
         $controllerInstance->dispatch('sellerinfo');
     }
     return true;
 }
コード例 #12
0
ファイル: Admin.php プロジェクト: arslbbt/mangentovies
 public function match(Zend_Controller_Request_Http $request)
 {
     $this->fetchDefault();
     $front = $this->getFront();
     $p = explode('/', trim($request->getPathInfo(), '/'));
     // get module name
     if ($request->getModuleName()) {
         $module = $request->getModuleName();
     } else {
         $p = explode('/', trim($request->getPathInfo(), '/'));
         $module = !empty($p[0]) ? $p[0] : $this->getFront()->getDefault('module');
     }
     if (!$module) {
         return false;
     }
     $realModule = $this->getModuleByFrontName($module);
     if (!$realModule) {
         if ($moduleFrontName = array_search($module, $this->_modules)) {
             $realModule = $module;
             $module = $moduleFrontName;
         } else {
             return false;
         }
     }
     if (!Mage::app()->isInstalled()) {
         Mage::app()->getFrontController()->getResponse()->setRedirect(Mage::getUrl('install'))->sendResponse();
         exit;
     }
     if (Mage::app()->isInstalled() && !$request->isPost()) {
         $shouldBeSecure = substr(Mage::getStoreConfig('web/unsecure/base_url'), 0, 5) === 'https' || Mage::getStoreConfigFlag('web/secure/use_in_adminhtml') && substr(Mage::getStoreConfig('web/secure/base_url'), 0, 5) === 'https';
         if ($shouldBeSecure && !Mage::app()->getStore()->isCurrentlySecure()) {
             $url = Mage::getBaseUrl('link', true) . ltrim($request->getPathInfo(), '/');
             Mage::app()->getFrontController()->getResponse()->setRedirect($url)->sendResponse();
             exit;
         }
     }
     // get controller name
     if ($request->getControllerName()) {
         $controller = $request->getControllerName();
     } else {
         $controller = !empty($p[1]) ? $p[1] : $front->getDefault('controller');
     }
     $controllerFileName = $this->getControllerFileName($realModule, $controller);
     if (!$controllerFileName || !is_readable($controllerFileName)) {
         $controller = 'index';
         $action = 'noroute';
         $controllerFileName = $this->getControllerFileName($realModule, $controller);
     }
     $controllerClassName = $this->getControllerClassName($realModule, $controller);
     if (!$controllerClassName) {
         $controller = 'index';
         $action = 'noroute';
         $controllerFileName = $this->getControllerFileName($realModule, $controller);
     }
     // get action name
     if (empty($action)) {
         if ($request->getActionName()) {
             $action = $request->getActionName();
         } else {
             $action = !empty($p[2]) ? $p[2] : $front->getDefault('action');
         }
     }
     // include controller file if needed
     if (!class_exists($controllerClassName, false)) {
         include $controllerFileName;
         if (!class_exists($controllerClassName)) {
             throw Mage::exception('Mage_Core', Mage::helper('core')->__('Controller file was loaded but class does not exist'));
         }
     }
     // instantiate controller class
     $controllerInstance = new $controllerClassName($request, $front->getResponse());
     if (!$controllerInstance->hasAction($action)) {
         return false;
     }
     // set values only after all the checks are done
     $request->setModuleName($module);
     $request->setControllerName($controller);
     $request->setActionName($action);
     // set parameters from pathinfo
     for ($i = 3, $l = sizeof($p); $i < $l; $i += 2) {
         $request->setParam($p[$i], isset($p[$i + 1]) ? $p[$i + 1] : '');
     }
     // dispatch action
     $request->setDispatched(true);
     $controllerInstance->dispatch($action);
     return true;
     #$request->isDispatched();
 }
コード例 #13
0
 /**
  * Simulates the dispatch process of the action named $action.
  *
  * @param string $action
  */
 protected function dispatch($action)
 {
     $this->request->setDispatched(true);
     $actionMethod = $this->actionNameToMethod($action);
     $this->controller->dispatch($actionMethod);
 }
コード例 #14
0
 public static function matchUrl(Zend_Controller_Request_Http $request)
 {
     if (AW_Kbase_Helper_Data::isModuleOutputDisabled() || !AW_Kbase_Helper_Data::getFrontendEnabled()) {
         return false;
     }
     $urlKey = self::getModuleUrlKey();
     $pathInfo = $request->getPathInfo();
     $requestUri = $request->getRequestUri();
     if ($request->getParam('___from_store')) {
         $_fromStore = Mage::app()->getSafeStore($request->getParam('___from_store'));
         if ($_fromStore->getData()) {
             $_oldUrlKey = self::getModuleUrlKeyFromConfig($_fromStore);
             if (strpos($pathInfo, '/' . $_oldUrlKey) === 0 && $_oldUrlKey != $urlKey) {
                 $_newUrl = self::secureUrl(Mage::getBaseUrl() . $urlKey . '/');
                 $response = Mage::app()->getResponse();
                 $response->setRedirect($_newUrl);
                 $response->sendHeaders();
                 $request->setDispatched(true);
                 return true;
             }
         }
     }
     if (0 !== strpos($pathInfo, '/' . $urlKey . '/')) {
         // if path does not begin with /kbase/
         return false;
     }
     $pathInfo = substr($pathInfo, strlen($urlKey) + 2);
     $request->setModuleName('kbase')->setControllerName('article');
     if (!strlen($pathInfo)) {
         $request->setActionName('index');
         return AW_Kbase_Helper_Data::getFrontendEnabled() && self::cacheRewrite($request->getPathInfo(), 'kbase/article/index');
     }
     $urlKeySuffix = self::getUrlKeySuffix();
     $isArticle = false;
     if (!$urlKeySuffix) {
         $_path = explode('/', $pathInfo);
         $_aUrl = false;
         if (count($_path) == 1) {
             $_aUrl = $_path[0];
         }
         if (count($_path) == 2) {
             $_aUrl = $_path[1];
         }
         if ($_aUrl) {
             $_aUrl = urldecode($_aUrl);
             $_aId = Mage::getModel('kbase/article')->getResource()->getIdByUrlKey($_aUrl);
             if (!$_aId) {
                 $_aId = Mage::getModel('kbase/article')->getResource()->getIdByUrlKey($_aUrl, true);
             }
             if ($_aId) {
                 $isArticle = true;
             }
         }
     }
     /**
      * Checking is customer comes from other store view
      * having various article suffix id in comparison
      * with current
      */
     if ($request->getParam('___from_store') && !$isArticle) {
         if (!isset($_fromStore)) {
             $_fromStore = Mage::app()->getSafeStore($request->getParam('___from_store'));
         }
         if ($_fromStore->getData()) {
             $_oldUrlSuffix = self::getUrlKeySuffixFromConfig($_fromStore);
             if ($urlKeySuffix != $_oldUrlSuffix) {
                 $_path = explode('/', $pathInfo);
                 $_aUrl = false;
                 if (count($_path) == 1) {
                     $_aUrl = $_path[0];
                 }
                 if (count($_path) == 2) {
                     $_aUrl = $_path[1];
                 }
                 if ($_aUrl) {
                     $_articleUrlKey = substr($_aUrl, 0, strpos($_aUrl, $_oldUrlSuffix));
                     $_aId = Mage::getModel('kbase/article')->getResource()->getIdByUrlKey($_articleUrlKey);
                     if (!$_aId) {
                         $_aId = Mage::getModel('kbase/article')->getResource()->getIdByUrlKey($_articleUrlKey, true);
                     }
                     if ($_aId) {
                         $_storeIds = Mage::getModel('kbase/article')->getResource()->getArticleStoreIds($_aId);
                         if (in_array(Mage::app()->getStore()->getId(), $_storeIds)) {
                             $_newUrl = self::secureUrl(Mage::getBaseUrl() . $urlKey . '/' . $_articleUrlKey . $urlKeySuffix);
                             $response = Mage::app()->getResponse();
                             $response->setRedirect($_newUrl);
                             $response->sendHeaders();
                             $request->setDispatched(true);
                             return true;
                         }
                     }
                 }
             }
         }
     }
     if ($urlKeySuffix && '/' != $urlKeySuffix && $urlKeySuffix == substr($pathInfo, -strlen($urlKeySuffix)) || $isArticle) {
         $pathInfo = substr($pathInfo, 0, strlen($pathInfo) - strlen($urlKeySuffix));
         $path = explode('/', $pathInfo);
         if (count($path) == 1) {
             $request->setActionName('article');
             self::$_queryParams[self::URL_PARAM_NAME_ARTICLE] = $path[0];
             return self::cacheRewrite($request->getPathInfo(), 'kbase/article/article/' . self::URL_PARAM_NAME_ARTICLE . '/' . $path[0]);
         } elseif (count($path) == 2) {
             $request->setActionName('article');
             self::$_queryParams[self::URL_PARAM_NAME_CATEGORY] = $path[0];
             self::$_queryParams[self::URL_PARAM_NAME_ARTICLE] = $path[1];
             return self::cacheRewrite($request->getPathInfo(), 'kbase/article/article/' . self::URL_PARAM_NAME_CATEGORY . '/' . $path[0] . '/' . self::URL_PARAM_NAME_ARTICLE . '/' . $path[1]);
         }
         return false;
     }
     // since further there will be listing pages only, we should check the condition here
     if (!Mage::getStoreConfig('kbase/general/frontent_enabled')) {
         return false;
     }
     // init parameters with optional ones
     self::$_queryParams = array(self::URL_PARAM_NAME_LIMIT => false, self::URL_PARAM_NAME_PAGE => false, self::URL_PARAM_NAME_SORT => false, self::URL_PARAM_NAME_SORT_DIR => false, self::URL_PARAM_NAME_QUERY => false);
     $pathInfo = substr($pathInfo, 0, strlen($pathInfo) - 1);
     $path = explode('/', $pathInfo);
     for ($i = count($path) - 1; $i > 0; $i -= 2) {
         $paramName = $path[$i - 1];
         if (array_key_exists($paramName, self::$_queryParams)) {
             //                for(; $path[$i] != $decoded = urldecode($path[$i]); $path[$i] = $decoded);
             //                self::$_queryParams[$paramName] = $path[$i];
             self::$_queryParams[$paramName] = urldecode($path[$i]);
             unset($path[$i]);
             unset($path[$i - 1]);
         }
     }
     foreach (self::$_queryParams as $paramName => $value) {
         if ($value = self::getQueryParam($requestUri, $paramName)) {
             self::$_queryParams[$paramName] = urldecode($value);
             $requestUri = self::unsetQueryParam($requestUri, $paramName);
         }
     }
     if (1 == count($path)) {
         if ('search' == $path[0]) {
             // if there were known parameters passed as query params
             if ($requestUri != $request->getRequestUri()) {
                 foreach (self::$_queryParams as $name => $value) {
                     if ($value) {
                         self::$_queryParams[$name] = self::encodeSpecialChars($value);
                     }
                 }
                 Mage::app()->getFrontController()->getResponse()->setRedirect(self::getUrl(self::URL_TYPE_SEARCH, self::$_queryParams))->sendResponse();
                 exit;
             }
             $request->setActionName('search');
             return true;
         }
         $request->setActionName('category');
         self::$_queryParams[self::URL_PARAM_NAME_CATEGORY] = $path[0];
         return true;
     } elseif (2 == count($path) && 'tag' == $path[0] && $path[1]) {
         $request->setActionName('tag');
         self::$_queryParams[self::URL_PARAM_NAME_TAG] = $path[1];
         return true;
     }
     return false;
 }
コード例 #15
0
ファイル: Dispatch.php プロジェクト: nyeholt/relapse
 /**
  * Allows the dispatching and processing of a separate 
  * controller request from inside an existing view. 
  * 
  * Should be used for read only stuff (please!)
  *
  * @param string $controller
  * @param string $action
  * @param array $params A list of parameters to bind into the new request
  * @param string $module
  * @param array $requestParams A list of parameters to pull from the current request
  */
 public function Dispatch($controller, $action, $params = array(), $module = null, $requestParams = array())
 {
     // If no module, use the current request module
     $oldRequest = null;
     $ctrl = Zend_Controller_Front::getInstance();
     $oldRequest = $ctrl->getRequest();
     if ($module == null) {
         /* @var $request Zend_Controller_Request_Abstract  */
         $name = null;
         if ($oldRequest) {
             $name = $oldRequest->getModuleName();
         }
         if ($name && $name != 'default') {
             $module = $name;
         }
     } else {
         if ($module == 'default') {
             $module = '';
         }
     }
     $key = $controller . '|' . $action . '|' . $module;
     if (isset(self::$__DISPATCHED[$key])) {
         za()->log("Recursive dispatch detected {$key} ", Zend_Log::ERR);
         return;
     }
     self::$__DISPATCHED[$key] = true;
     $request = new Zend_Controller_Request_Http();
     $response = new Zend_Controller_Response_Http();
     $request->setControllerName($controller);
     $request->setActionName($action);
     if ($params) {
         $request->setParams($params);
     }
     if (count($requestParams)) {
         foreach ($requestParams as $rp) {
             // get from the current request and stick into the new
             $value = $oldRequest->getParam($rp, '');
             $request->setParam($rp, $value);
         }
     }
     if ($module) {
         $request->setModuleName($module);
     }
     $oldView = Zend_Registry::get(NovemberApplication::$ZEND_VIEW);
     $allPaths = $oldView->getAllPaths();
     $newView = new CompositeView();
     foreach ($allPaths['script'] as $scriptPath) {
         $newView->addScriptPath($scriptPath);
     }
     foreach ($allPaths['helper'] as $prefix => $path) {
         $newView->addHelperPath($path, $prefix);
     }
     foreach ($allPaths['filter'] as $prefix => $path) {
         $newView->addFilterPath($path, $prefix);
     }
     Zend_Registry::set(NovemberApplication::$ZEND_VIEW, $newView);
     $dispatcher = new InjectingDispatcher();
     $dispatcher->addControllerDirectory('controllers', 'default');
     $dispatcher->setParams($params)->setResponse($response);
     $request->setDispatched(true);
     $dispatcher->dispatch($request, $response);
     $response->outputBody();
     Zend_Registry::set(NovemberApplication::$ZEND_VIEW, $oldView);
 }