如何从代码中调用Magento中的管理控制器及其方法


How to invoke an admin controller and its methods in Magento from code?

我正在创建一个脚本,该脚本将自动从CRON完成一些任务,这些任务现在是从后端完成的(手动管理)。如何调用Magento扩展的控制器及其方法并从代码中传递必要的参数?

我考虑过使用管理员登录的curl并发出必要的请求。但我想知道是否有一种简单的方法可以在不使用curl的情况下实现这一点,是否只是简单地包括一些文件并调用必要的类和方法,或者是否有方法可以扩展扩展的类并直接使用它们。

例如,

require "Mage.php";
$testcontroller = New TestController();
$testcontroller->method();

我能够实现一个解决方案,而且它运行得很好,就像我需要的那样。感谢这个链接,也感谢其他发布答案的人。

以下代码存在于外部脚本中。参数值将通过我的自定义SQL脚本获得。

    require "Mage.php";
    require "PATH TO YOUR MAGENTO EXTENSION CONTROLLER.php";
    umask ( 0 );
    Mage::app ( 'admin' );        
    Mage::app()->getRequest()->setParam('TEST','123');
    $testcontroller = New TestController(Mage::app()->getRequest());
    $testcontroller->method();

为了让Magento/Zend将所有正确的对象(如请求/响应)放在一起,您需要服务器环境变量,如$_POST、$_GET、$_COOKIE等。所以不要这样做。

您的控制器操作应该只是对一些模型进行操作并调用它们的方法。它不应该包含应用程序逻辑本身,而应该充当一个"控制器"。在这种情况下,您应该在模块的etc目录中打开config.xml,并创建一个cron任务:

http://www.magentocommerce.com/wiki/1_-_installation_and_configuration/how_to_setup_a_cron_job

这样,您就可以在没有服务器环境的情况下触发应用程序逻辑,并且不再需要控制器。