PrestaShop:无法通过网络服务访问新添加的资源

PrestaShop: Can't access newly added resource through webservice

我在 phpMyAdmin 的 Prestashop 数据库中创建了用户 table,table 的模式是:

CREATE TABLE users (
 id int NOT NULL AUTO_INCREMENT,
 Token int NOT NULL,
 PRIMARY KEY (id),
 UNIQUE KEY (Token)
);

我想像其他资源一样将此 table 添加到我的网络服务资源列表中,并从另一个应用程序访问该资源。

为此,我到目前为止完成了以下任务:

  1. 我创建了/prestashop/mymodule/override/classes/webservice/ WebserviceRequest.php:

    class WebserviceRequest extends WebserviceRequestCore {
        public static function getResources(){
            $resources = parent::getResources();
            $resources['users'] = array('description' => 'Device registration', 'class' => 'Users');
            ksort($resources);
            return $resources;
        }
    }
    
  2. /prestashop/mymodule/override/classes/Users.php:

    class Users extends ObjectModel {
        public static $definition = array(
            'table' => 'users',
            'primary' => 'id',
            'fields' => array(
                'Token' => array('type' => self::TYPE_INT)
            )
         );
        protected $webserviceParameters = array();
     }
    

结果我在网络服务资源列表中找到了table。但是当我点击 URL 时:example.com/api/users 没有返回 XML 数据。

我在谷歌上搜索了很多问题,但没有找到任何有效的解决方案:如何在网络服务资源中添加新数据库 table users 并使用 [=15 访问资源=] URL.

全部正确,但只有少量更正:

table 必须在安装时选择前缀(默认为 ps_):

CREATE TABLE ps_users (
 id int NOT NULL AUTO_INCREMENT,
 Token int NOT NULL,
 PRIMARY KEY (id),
 UNIQUE KEY (Token)
);

第 1 点没问题 ;)

第 2 点,不要忘记将 table 字段添加为 public 变量,否则 XML 将不会显示存储在数据库中的信息:

class UsersAPI extends ObjectModel {
    public $Token;

    public static $definition = array(
        'table' => 'users',
        'primary' => 'id',
        'fields' => array(
            'Token' => array('type' => self::TYPE_INT)
        )
    );
    protected $webserviceParameters = array();
}

编辑: 如果您进行了覆盖,请不要忘记删除 prestashop/cache/class_index.php.