2

I have a custom module, with an IndexController and an indexAction. This has a route with a fronName set in the config.xml(for example angular-app). On this page I have an angular app, with it's own routing. Everything works fine until I don't refresh the browser. After refresh I get 404.
How can I setup magento's router to handle every request under the angular-app with the IndexController:indexAction.

So what I would like:

  • request: http://domain.com/angular-app -> IndexController:indexAction
  • request: http://domain.com/angular-app/x/y/z -> IndexController:indexAction where x, y, z are dynamic parameters.
7ochem
7,61516 gold badges54 silver badges82 bronze badges
asked Mar 24, 2016 at 21:01
2
  • Could you share some code? It would make it a little easier to debug Commented Mar 24, 2016 at 21:35
  • Sure, - config.xml: config.xml - IndexController: IndexController - index.phtml: index.phtml Commented Mar 24, 2016 at 21:52

1 Answer 1

1

I am not expert in angular app but as per as my understand,You want to send all angular requests with prefix angular-app in your url.

So,you need to create new custom router. To understand the custom route,Follow the below link.

For your case, using controller_front_init_routers add custom router at system by $front->addRouter('addangularapp',$this); on function initControllerRouters of class ModuleNameSpace_ModuleName_Controller_Router

<!-- define route -->
<frontend>
 <routers>
 <angularapp> <!-- router identifier -->
 <use>standard</use>
 <args>
 <modules>
 <module>ModuleNameSpace_ModuleName</module>
 <frontName>angularapp</frontName>
 </modules>
 </args>
 </angularapp>
 </routers>
</frontend>
<global>
 <!-- event for add a router -->
 <events>
 <controller_front_init_routers>
 <observers> 
 <add_angularapp_route> <!-- observer identifier -->
 <class>ModuleNameSpace_ModuleName_Controller_Router</class>
 <method>initControllerRouters</method>
 </add_angularapp_route> 
 </observers>
 </controller_front_init_routers>
 </events>
</global>

Then at match() validate and modify http request (Zend_Controller_Request_Http). and if request have contain angular-app then it internally set IndexController as controller as ,indexAction as request action and set your module as request module.

$request->setModuleName('YOURROUTE') 
 ->setControllerName('index')
 ->setActionName('index');

Controller code may like:

<?php
class ModuleNameSpace_ModuleName_Controller_Router extends Mage_Core_Controller_Varien_Router_Abstract{
 /**
 * Initialize Controller Router
 *
 * @param Varien_Event_Observer $observer
 */
 public function initControllerRouters($observer){
 $front=$observer->getEvent()->getFront();
 $front->addRouter('addangularapp',$this);
 }
 /* validate and modify the request
 * Params Zend_Controller_Request_Htt
 */
 public function match(Zend_Controller_Request_Http $request){
 /* If Magento Magento is not install then 
 * redirect to installer url
 */
 If(!Mage::isInstalled()):
 Mage::app()->getFrontController()->getResponse()
 ->setRedirect(Mage::getUrl('install'))
 ->sendResponse();
 exit;
 endif;
 $requestPathInfo=trim($request->getPathInfo(),'/');
 Mage::log('aaa'.$requestPathInfo.'StoreId'.Mage::app()->getStore()->getId(), null, 'logfile.log');
 /* check -review-form not exit
 * then immediate return false
 */ 
 if(strpos($requestPathInfo,'angular-app')==false):
 return false;
 endif;
 /* get productut from url 
 by substr 
 */
 $producturl=str_replace('angular-app','',$requestPathInfo);
 $condition=new Varien_Object(array('product_url'=>$producturl,
 'continue'=>true));
 Mage::dispatchEvent('angular_app_controller_router_match_before', array(
 'router' => $this,
 'condition' => $condition
 ));
 if($condition->getRedirectUrl()){
 Mage::app()->getResponse()
 ->setRedirect($condition->getReDirectUrl())
 ->sendResponse();
 $request->setDispatched(true);
 return true;
 }
 if(!$condition->getContinue()){
 return false;
 }
 $request->setModuleName('YOURROUTE') 
 ->setControllerName('index')
 ->setActionName('index')
 ->setParam('customparam', $requestPathInfo);
 $request->setAlias(
 Mage_Core_Model_Url_Rewrite::REWRITE_REQUEST_PATH_ALIAS,
 $requestPathInfo
 );
 return true;
 }
}

Note: code is not tested.

same concet havec in https://magento.stackexchange.com/a/70619/4564 answer

answered Mar 24, 2016 at 21:55
0

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.