Prestashop模块开发 - 如何在模块安装时调用控制器initMethod?

时间:2017-11-13 10:55:25

标签: php model-view-controller module prestashop prestashop-1.6

在controllers / front中,我创建了一个名为abandonedCarts的控制器:

class <moduleName>AbandonedCartsModuleFrontController extends ModuleFrontController
{

public function __construct()
{
    parent::__construct();
    $this->context = Context::getContext();
    $this->store_debug('Controller - __construct');
}


public function initContent()
{
    parent::initContent();
    $this->store_debug('Controller - init');
}

}

其中store_debug是一个只需登录db的函数(仅用于检查)。 多亏了这一点,我知道当我以这种方式从URL调用控制器时

site/index.php?fc=module&module=olyo&controller=abandonedCarts

正在调用construct和init方法,但我需要的是在安装模块时(或在第一次启动时)调用控制器。

在主文件中我还在构造函数中输入了这一行:

$this->controllers = array('abandonedCarts');

但我不确定我是否需要它

2 个答案:

答案 0 :(得分:1)

您可以包含Controller,只需调用以下对象方法:

<?php 
class MyModule extends Module {

  public install(){
     $file = _PS_MODULE_DIR_.'/'.$this->name.'/controllers/front/default.php';
     require_once $file;
     $obj = new ObjectController();
     $obj->my_super_method();
     return true;
  }
}

您不需要控制器参数。默认情况下,你应该坚持使用Prestashop的生成器:https://validator.prestashop.com/

答案 1 :(得分:0)

你不应该在admin上下文中实例化FrontController,这是一个解决方法:

您的模块:

<?php 
class MyModule extends Module {
  public install(){
     $result = parent::install();
     if ($result) {
         $this->doStuff();
     }
     return $result;
  }

  public function doStuff() {
     // do stuff
  }
}

你的控制器

<?php
class <moduleName>AbandonedCartsModuleFrontController extends ModuleFrontController
{
    public function initContent()
    {
        parent::initContent();
        $this->module->doStuff();
    }
}