Magento从当前控制器中获取另外一个控制器中的方法
7天成为Magento系统架构师,现在开始学习Magento全栈开发!
《Magento2.X企业级开发实战》
首先,正常人类是不会这么操作的。当然了,特殊的情况还是会存在的。 Mage.php 文件里面 实例化类的方法 getControllerInstance
/**
* Retrieve Controller instance by ClassName
*
* @param string $class
* @param Mage_Core_Controller_Request_Http $request
* @param Mage_Core_Controller_Response_Http $response
* @param array $invokeArgs
* @return Mage_Core_Controller_Front_Action
*/
public static function getControllerInstance($class, $request, $response, array $invokeArgs = array())
{
return new $class($request, $response, $invokeArgs);
}
这里我们用下面代码获取控制器类的时候会报错
Fatal error: Class 'Mage_Customer_AccountController' not found
$controller = Mage::getControllerInstance('Mage_Customer_AccountController', null, null);
原因是没有加载这个Mage_Customer_AccountController
类的php文件。 现在先看看路由的时候怎么加载控制器的Class 的 Mage_Core_Controller_Varien_Router_Standard
public function match(Zend_Controller_Request_Http $request){
...
$controllerClassName = $this->_validateControllerClassName($realModule, $controller);
if (!$controllerClassName) {
continue;
}
// instantiate controller class
$controllerInstance = Mage::getControllerInstance($controllerClassName, $request, $front->getResponse());
...
}
到了_validateControllerClassName()里面的 _includeControllerClass 才具体include 控制器类文件
/**
* Include the file containing controller class if this class is not defined yet
*
* @param string $controllerFileName
* @param string $controllerClassName
* @return bool
*/
protected function _includeControllerClass($controllerFileName, $controllerClassName)
{
if (!class_exists($controllerClassName, false)) {
if (!file_exists($controllerFileName)) {
return false;
}
include $controllerFileName;
if (!class_exists($controllerClassName, false)) {
throw Mage::exception('Mage_Core', Mage::helper('core')->__('Controller file was loaded but class does not exist'));
}
}
return true;
}
到这里就很明了了。Magento从当前控制器中获取另外一个控制器中的方法就是得先include其他控制的类php文件,后面就是操作一个php类了 这种反人类的做法会不会是我想多了,本文也是为写而写了,实际应用中不建议做这种操作。有错误请帮忙指出。
文章来源于互联网:Magento从当前控制器中获取另外一个控制器中的方法
如无特殊说明或标注,任何个人或组织,复制、转载、采集本站内容请注明:
本文来源于:【Magento中文网】,并添加本文地址链接。
如未按上述操作复制或转载,本站有权追究法律责任。
若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
本文来源于:【Magento中文网】,并添加本文地址链接。
如未按上述操作复制或转载,本站有权追究法律责任。
若本站内容侵犯了原著者的合法权益,可联系我们进行处理。