Prestashop beforeRequest 中间件

Prestashop beforeRequest Middleware

我正在尝试为 Prestashop 1.6 构建一个模块,如果目标 URL 存在于数据库中,该模块将重定向用户。

我要做的是:

public function checkRedirection ($url) {
    $line = Db::getInstance()->executeS('SELECT * FROM ps_custom_redirection WHERE url = ' . pSQL($url));

    if (!sizeof($line)) {
        return null;
    }

    header('Location: ' . $line[0]['destination']);
    http_response_code($line[0]['http_code']);
    exit();
}

现在,当触发 displayTop 挂钩时,我可以 运行 这个函数。但我宁愿在请求过程开始时启动此功能。

Prestashop 提供这样的挂钩吗?如果没有,我可以创建一个吗?我应该在哪里编写触发它的代码?

执行的拳头钩子是actionDispatcher,想用就用

您会发现此挂钩在 /classes/Dispatcher.php 中执行。搜索代码 Hook::exec('actionDispatcher', $params_hook_action_dispatcher);.

如果你想把这个钩子添加到你的模块中,你需要在主模块文件中使用它的名字,像这样:

public function install() { return parent::install() && $this->registerHook('actionDispatcher'); }

public function hookActionDispatcher($params) { // your code Tools::redirect($url); }

在 Prestashop 中 Tools::redirect($url); 用于重定向。