Создать пользовательский веб-сервиса Электронный ресурс

Создать пользовательский веб-сервиса Электронный ресурс

16.02.2018 11:51:54 Просмотров 41 Источник

Я создаю модуль для PrestaShop 1.6, где я создаю таблицу следующим образом в mymodule/mymodule.в PHP:

class Mymodule extends Module {

    // Some code

    public function installDb() {
        return Db::getInstance()->execute("
        CREATE TABLE IF NOT EXISTS `" . _DB_PREFIX_ . "mytable`(
        `id_mdm` INT NOT NULL AUTO_INCREMENT,
        `id_category` INT NOT NULL,
        `service` INT NOT NULL,
        `title` VARCHAR(300) NOT NULL default '',
        `title_font_size` VARCHAR(128) NOT NULL default '',
        `title_color` VARCHAR(128) NOT NULL default '',
        `background_color` VARCHAR(128) NOT NULL default '',
        `border_style` VARCHAR(128) NOT NULL default '',
        `position` INT NOT NULL,
        `count` INT NOT NULL,
        PRIMARY KEY (`id_mdm`), UNIQUE (`id_category`)) ENGINE = InnoDB;");
    }

    // Some code

}

Он отлично работает, моя таблица создана. Тогда я переопределить веб-сервиса в Библиотека mymodule/изменить/классы/веб-сервиса/WebserviceRequest.в PHP:

class WebserviceRequest extends WebserviceRequestCore {
    public static function getResources() {
        $resources = parent::getResources();
        $resources['myresource'] = array(
            'description' => '',
            'class' => 'myresource'
        );
        ksort($resources);
        return $resources;
    }
}

Я создаю новый класс с именем myresource в mymodule / override / classes/Myresource.в PHP:

class MyresourceCore extends ObjectModel {
    public $id;
    public $id_mdm;
    public $id_category;
    public $service;
    public $title;
    public $title_font_size;
    public $title_color;
    public $background_color;
    public $border_style;
    public $position;
    public $count;

    public static $definition = array(
        'table' => 'mytable',
        'primary' => 'id_mdm',
        'fields' => array(
            'id_category' => array('type' => self::TYPE_INT),
            'service' => array('type' => self::TYPE_INT),
            'title' => array('type' => self::TYPE_STRING),
            'title_font_size' => array('type' => self::TYPE_STRING),
            'title_color' => array('type' => self::TYPE_STRING),
            'background_color' => array('type' => self::TYPE_STRING),
            'border_style' => array('type' => self::TYPE_STRING),
            'position' => array('type' => self::TYPE_INT),
            'count' => array('type' => self::TYPE_INT)
        )
    );

    protected $webserviceParameters = array();
}

В бэк-офисе я создаю ключ для myresource, но когда я тестирую в своем браузере http://mydomain/api/myresource?ws_key=mykey, есть следующая ошибка:

Fatal error: Class 'myresource' not found in /path/mydomain/classes/webservice/WebserviceRequest.php on line 502

Я не знаю, почему PrestaShop не обнаруживает его. Заранее благодарю вас за помощь.

У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/48823084/create-a-custom-resource-webservice-prestashop#comment84650430_48823084
Пытались ли вы переустановить модуль после того, как вы создали переопределить так, чтобы переопределить копируется в переопределить/классы/веб-сервиса/WebserviceRequest.РНР? Также проверьте, является ли переопределение путем для класса в кэше / class_index.РНР. В WebserviceRequest должен иметь путь как переопределить/классы/вебсервис/WebserviceRequest.РНР. Вы также можете удалить этот файл, чтобы воссоздать его.
https://stackoverflow.com/questions/48823084/create-a-custom-resource-webservice-prestashop#comment84651509_48823084
Да, я попытался переустановить его, но ничего не изменилось. WebserviceRequest.php эффективно копируется для переопределения / classes/ webservice/. Я также удаляю кэш / class_index.php для запуска регенерации, но он не обнаруживает переопределение / classes / Myresource.РНР
https://stackoverflow.com/questions/48823084/create-a-custom-resource-webservice-prestashop#comment84655215_48823084
попробуйте изменить MyresourceCore на Myresource. затем введите class_index.РНР.
https://stackoverflow.com/questions/48823084/create-a-custom-resource-webservice-prestashop#comment84657729_48823084
Я попробовал его, переустановил, а затем удалил class_index.php, но никаких изменений нет...

Ответы - Создать пользовательский веб-сервиса Электронный ресурс / Create a custom resource webservice PrestaShop

Является ответом!
B. Mike

26.02.2018 04:00:43

Наконец, я нашел альтернативное решение без использования собственного веб-сервиса PrestaShop. Я создал папку под названием веб-сервиса в сборка mymodule/веб-сервиса/сборка mymodule.в PHP. Этот файл будет использоваться для публикации данных на веб-сайте PrestaShop. Вот как я это сделал:

<?php
$currentDirectory = str_replace('modules/mymodule/webservice/', '', 
dirname($_SERVER['SCRIPT_FILENAME']) . "/");
$sep = DIRECTORY_SEPARATOR;
require_once $currentDirectory . 'config' . $sep . 'config.inc.php';
require_once $currentDirectory . 'init.php';

$hostnameIp = $_SERVER['REMOTE_ADDR'];

if ($hostnameIp == 'AUTHORIZED_IP') {
    if ($_SERVER['REQUEST_METHOD'] == 'POST') {
        // Some code
        http_response_code(200);
    } else {
        http_response_code(405);
    }
} else {
    http_response_code(403);
}

Затем мне просто нужно выполнить запрос POST к myresource по следующему url-адресу: http://mydomain/modules/mymodule/webservice/mymodule.в PHP. Будьте осторожны, чтобы сделать некоторые проверки для обеспечения безопасности, как IP-адрес. Если проверка успешна, то вы делаете некоторую обработку, чтобы вставить или обновить данные в таблицы mysql.

Ivo Rab.

15.08.2018 01:36:04

Если вы проверите журналы ошибок PHP, вы заметите ошибку типа Class not found. В этом случае это класс "MyResource" не найден.

Чтобы решить эту проблему, необходимо включить класс модели в конструктор метода override следующим образом

class WebserviceRequest extends WebserviceRequestCore {
    public function __construct()
    {
         include_once(_PS_MODULE_DIR_ . 'myresource' . DIRECTORY_SEPARATOR . 'classes' . DIRECTORY_SEPARATOR . 'MyResource.php');
    }

    public static function getResources()
    {
        $resources = parent::getResources();
        $resources['myresource'] = array(
            'description' => '',
            'class' => 'myresource'
        );
        ksort($resources);
        return $resources;
    }
}

И Вам нужно поместить класс модели в /mymodule / classes/MyResource.РНР

Размещение класса модели в mymodule / override / classes/Myresource.php не является правильным, потому что нет класса Myresource для переопределения. Это даст вам ошибку при удалении модуля - вы не сможете удалить его

K. A.

25.06.2019 12:31:29

В Prestashop 1.7 вы можете использовать этот крюк: addWebserviceResources

Пример:

include_once dirname(__FILE__) . '/classes/Sample.php';

class myAPISample extends Module {

    // ...

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

    // ...

    public function hookAddWebserviceResources($params) {
         return [ 'samples' => ['description' => 'My sample', 'class' => 'Sample' ] ];
    }

    //...
}

См. также (на французском языке) : https://www.h-hennes.fr/blog/2018/06/25/prestashop-ajouter-un-objet-dans-lapi/

Закрыть X