Prestashop - 我的模块的 REST 端点

     2023-02-19     180

关键词:

【中文标题】Prestashop - 我的模块的 REST 端点【英文标题】:Prestashop - REST endpoints for my module 【发布时间】:2018-10-05 23:37:57 【问题描述】:

我正在开发 Prestashop 模块,它将导出客户数据和订单,它将包含用于客户同步、购物车和订单事件的挂钩 - 通常是与类似 CRM 服务的集成模块。

我的模块包含它自己的视图,在 vue.js 中制作 - 单页,异步。有注册、登录、设置等页面。与后端的通信是通过 baseUrl/mymodule/actionname 路由上的 GET/POST 请求和 vue 视图所依赖的简单 json 响应进行的。只需为我的模块创建 REST 端点,如下例所示。

Wordpress 自定义 RestApi:

class RestApi

    public function __construct()
    
        add_action('rest_api_init', array(get_class($this), 
        'register_endpoints'));
    

    public static function register_endpoints()
    
        register_rest_route('mymodule', '/login', array(
            'methods' => WP_REST_Server::CREATABLE,
            'callback' => array('RestApi', 'login' ),
        ));
    

SugarCRM 自定义 RestApi:

class ModuleRestApi extends SugarApi

    public function registerApiRest()
    
        return [
            'moduleLogin' => [
                'reqType' => 'POST',
                'noLoginRequired' => true,
                'path' => [
                    'mymodule', 'login'
                ],
                'method' => 'login'
            ],
        ];
    

我在 PrestaShop 中找不到类似的解决方案,presta 文档中没有关于自定义端点的消息,我尝试使用带有友好 url 的 FrontModuleControllers,但它似乎对我不起作用,它会抛出很多东西作为响应对我来说没用,当我尝试覆盖 init() 方法时,它也需要很多东西才能真正启动控制器。我需要简单的 REST 解决方案,我可以在其中放置用于从我的视图接收数据的逻辑,将其传递给我的 CRM 服务并将 json 响应返回到我的视图。我不需要更多的模板或视图渲染,只需要路由即可。

【问题讨论】:

【参考方案1】:

可以使用 Prestashop Web 服务,它允许从模块中添加资源。这种解决方案可以在标准和安全方面节省一些时间。

有关 Prestashop Webservice 中模块资源的文档在此链接中:

https://webkul.com/blog/creating-prestashop-module-webservice-api/

【讨论】:

【参考方案2】:

PrestaShop 不支持此功能。但是,您可以使用模块和前端控制器来做到这一点。

这是一个基本的例子。

1.注册友好 URL 的模块

class RestApiModule extends Module

    public function __construct() 
    
        $this->name = 'restapimodule';
        $this->tab = 'front_office_features';
        $this->version = '1.0';

        parent::__construct();
    

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

    public function hookModuleRoutes()
    
        return [
            'module-restapimodule-login' => [
                'rule' => 'restapimodule/login',
                'keywords' => [],
                'controller' => 'login',
                'params' => [
                    'fc' => 'module',
                    'module' => 'restapimodule'
                ] 
            ]              
        ];
    

2。创建一个抽象的 REST 控制器

创建一个抽象控制器,以便实际的端点可以从它扩展。在您的模块controllers 文件夹中创建它,然后将其命名为AbstractRestController.php

abstract class AbstractRestController extends ModuleFrontController

    public function init() 
    
        parent::init();
        switch ($_SERVER['REQUEST_METHOD']) 
            case 'GET':
                $this->processGetRequest();
                break;
            case 'POST':
                $this->processPostRequest();
                break;
            case 'PATCH': // you can also separate these into their own methods
            case 'PUT':
                $this->processPutRequest();
                break;
            case 'DELETE':
                $this->processDeleteRequest();
                break;
            default:
                // throw some error or whatever
        
    

    abstract protected function processGetRequest();
    abstract protected function processPostRequest();
    abstract protected function processPutRequest();
    abstract protected function processDeleteRequest();

3。创建一个实际的前端控制器

在您的模块controllers/front 文件夹中创建前端控制器并将其命名为login.php

require_once __DIR__ . '/../AbstractRestController.php';

class RestApiModuleLoginModuleFrontController extends AbstractRestController

    protected function processGetRequest()
    
        // do something then output the result
        $this->ajaxDie(json_encode([
            'success' => true,
            'operation' => 'get'
        ]));
    

    protected function processPostRequest()
    
        // do something then output the result
        $this->ajaxDie(json_encode([
            'success' => true,
            'operation' => 'post'
        ]));
    

    protected function processPutRequest()
    
        // do something then output the result
        $this->ajaxDie(json_encode([
            'success' => true,
            'operation' => 'put'
        ]));
    

    protected function processDeleteRequest()
    
        // do something then output the result
        $this->ajaxDie(json_encode([
            'success' => true,
            'operation' => 'delete'
        ]));
    

安装模块,现在你可以点击http://example.com/restapimodule/login,根据请求类型,它会做任何你想做的事情,你会得到 JSON 响应。

要添加更多端点,请在 hookModuleRoutes 数组中添加另一个 module-restapimodule-endpointname 条目以及从 AbstractRestController 扩展的前端控制器。

如果您还想要正确的响应代码等,您将不得不使用本机 php 函数设置标头,因为 PrestaShop afaik 没有任何实用程序可以为您执行此操作或使用某种库。

同样适用于您可能想要设置的任何其他标头,例如 content-type(默认为 text/html)。

【讨论】:

谢谢先生!这正是我想要的。 你好@maciey_b 你有这个工作吗?我尝试编写相同的示例,当我尝试点击 /restapimodule/login 时出现“找不到页面”谢谢

使用 Prestashop 1.6 在模块中获取产品类别名称

】使用Prestashop1.6在模块中获取产品类别名称【英文标题】:GetProductCategoryNameInModuleusingPrestashop1.6【发布时间】:2016-03-2310:17:02【问题描述】:我为prestashop创建了自己的模块(目前非常基本)。我想为产品添加一些自定义(类似... 查看详情

模块 Prestashop 嫁接钩子模块是不同的服务器开发和预生产

】模块Prestashop嫁接钩子模块是不同的服务器开发和预生产【英文标题】:ModulePrestashopgraftinghookmoduleisdifferentsserverdevandpréproduction【发布时间】:2021-02-0123:43:54【问题描述】:我开发了一个产品建议模块。我在我们服务器的prestash... 查看详情

自定义模块翻译prestashop 1.7.8.1的问题

】自定义模块翻译prestashop1.7.8.1的问题【英文标题】:Problemofcustommoduletranslationprestashop1.7.8.1【发布时间】:2022-01-0823:17:57【问题描述】:我已经构建了自己的模块,当我在BO中搜索我的模块并尝试翻译它时,我会被重定向到“shop... 查看详情

如何将 hookBackOfficeHeader 中的条件添加到我自己的 prestashop 模块?

】如何将hookBackOfficeHeader中的条件添加到我自己的prestashop模块?【英文标题】:HowcaniaddaconditioninhookBackOfficeHeadertomyownprestashopmodule?【发布时间】:2017-04-1723:24:14【问题描述】:我尝试发送到我的模块prestashop插件。我收到一条消... 查看详情

使用带有 prestashop 1.7.2.1 模块的 bootstrap 4

】使用带有prestashop1.7.2.1模块的bootstrap4【英文标题】:usingbootstrap4withprestashop1.7.2.1module【发布时间】:2018-01-2721:35:39【问题描述】:我已经安装了Prestashop1.7.2.1,我正在尝试为它编写一个模块。一般来说,我只想测试bootstrap(4?)支... 查看详情

如何在 Prestashop 1.5 中过滤/自定义搜索模块?

】如何在Prestashop1.5中过滤/自定义搜索模块?【英文标题】:Howtofilter/customizesearchmoduleinPrestashop1.5?【发布时间】:2014-04-0601:50:59【问题描述】:我有一个prestashop网站,但遇到以下问题。我的免费prestashop搜索模块(默认情况下)... 查看详情

Prestashop 1.7 模块目录数据未找到

】Prestashop1.7模块目录数据未找到【英文标题】:Prestashop1.7Modulescatalogdatanotfound【发布时间】:2017-04-0423:11:10【问题描述】:所以我在本地安装了PrestaShop1.7(请记住我的本地作品完美找到)将其移至实时登台(没有数据库导入或... 查看详情

Prestashop - 现有 prestashop 模块中的覆盖功能

】Prestashop-现有prestashop模块中的覆盖功能【英文标题】:Prestashop-overridefunctioninexistingprestashopmodule【发布时间】:2011-09-0217:45:22【问题描述】:我想更改现有的prestashop模块而不复制它并创建新模块。我知道可以覆盖prestashop中的.t... 查看详情

Prestashop 没有错误/空白页

】Prestashop没有错误/空白页【英文标题】:Prestashopnoerrors/blankpage【发布时间】:2011-04-1622:55:30【问题描述】:我正在为Prestashop开发一个PHP模块,但我在尝试调试代码时遇到了困难。每当有东西掉下来时,它不会显示错误,只是... 查看详情

尝试在 prestashop 1.7 管理模块中加载 js 和 css 文件

】尝试在prestashop1.7管理模块中加载js和css文件【英文标题】:tryingtoloadjsandcssfilesinprestashop1.7adminmodule【发布时间】:2018-01-0301:45:10【问题描述】:我正在学习为prestashop1.7编写模块,目前我正在尝试加载用户尝试配置模块时将使... 查看详情

如何使用 prestashop 1.7 上的模块在前台创建自定义页面

】如何使用prestashop1.7上的模块在前台创建自定义页面【英文标题】:HowtocreatecustompageonFront-Officewithamoduleonprestashop1.7【发布时间】:2017-04-0409:21:49【问题描述】:我在产品详细信息页面上创建了按钮A。单击A按钮时,它将重定向... 查看详情

Prestashop PayPal 模块不会保存设置

】PrestashopPayPal模块不会保存设置【英文标题】:PrestashopPayPalmodulewon\'tsavesettings【发布时间】:2016-08-2006:08:06【问题描述】:安装模块并完成我的API凭据后,我单击“保存”按钮,但总是收到以下错误:错误!您需要在步骤3中填... 查看详情

Prestashop - 购物篮总价

】Prestashop-购物篮总价【英文标题】:Prestashop-baskettotalprice【发布时间】:2011-09-2403:58:56【问题描述】:又是我的另一个Prestashop问题。在我的模板中,我想在篮子(购物车)中显示总价而不使用那里的模块,jsut只是在那里显示... 查看详情

覆盖 Prestashop 1.7 模块的方法

】覆盖Prestashop1.7模块的方法【英文标题】:OverrideamethodofPrestashop1.7module【发布时间】:2021-01-0601:18:14【问题描述】:我想重写Prestashop1.7.6.7的官方模块ps_featuredsearch的一行简单代码。文件是/modules/ps_facetedsearch/src/Hook/ProductSearch.php... 查看详情

从 Prestashop 模块发出 ajax 请求

】从Prestashop模块发出ajax请求【英文标题】:MakeanajaxrequestfromaPrestashopmodule【发布时间】:2017-09-2712:51:20【问题描述】:我正在制作一个模块,我需要发出一个ajax请求,如果可能的话,使用JSON响应,我该怎么做?我不太了解Presta... 查看详情

Magento 或 Prestashop,哪个更好? [关闭]

】Magento或Prestashop,哪个更好?[关闭]【英文标题】:MagentoorPrestashop,whichisbetter?[closed]【发布时间】:2010-11-2417:27:35【问题描述】:我想为我的小商店找到一个电子商务解决方案。我的朋友告诉我Prestashop非常易于使用和开发模块... 查看详情

根据 prestashop 中的模块状态禁用覆盖的 tpl 文件

】根据prestashop中的模块状态禁用覆盖的tpl文件【英文标题】:disableoverridedtplfilebasedonmodulestatusinprestashop【发布时间】:2014-10-2014:08:38【问题描述】:我是prestashop新手并使用1.6版本。我正在创建一个模块,该模块将在将产品添加... 查看详情

如何在 prestashop 中生成到模块控制器的链接?

】如何在prestashop中生成到模块控制器的链接?【英文标题】:howtogeneratealinktoamodulecontrollerinprestashop?【发布时间】:2014-09-2422:32:39【问题描述】:在prestashop中生成模块控制器链接的确切方法是什么?另外,应该如何真正命名控... 查看详情