ang3/odoo-bundle

Symfony 扩展包,用于管理您的 Odoo 数据库。

安装次数: 2,161

依赖关系: 0

建议者: 0

安全: 0

星标: 5

关注者: 2

分支: 3

开放问题: 1

类型:symfony-bundle

v0.1.3 2021-01-09 14:38 UTC

This package is auto-updated.

Last update: 2024-09-14 04:38:55 UTC


README

Build Status Latest Stable Version Latest Unstable Version Total Downloads

此扩展包是 ang3/php-odoo-api-client 和 ang3/php-odoo-orm 包的 Symfony 集成。

主要功能

  • 客户端注册表
  • 对象关系映射 (ORM)
  • 调试命令
  • 记录验证器

两个包的文档

安装

步骤 1: 下载扩展包

打开命令行,进入您的项目目录,并执行以下命令以下载此扩展包的最新稳定版本

$ composer require ang3/odoo-bundle

此命令要求您已全局安装 Composer,如 Composer 文档中的安装章节所述。

步骤 2: 配置您的应用程序

创建文件 config/packages/ang3_odoo.yaml 并粘贴以下配置

# app/config/config.yml or config/packages/ang3_odoo.yaml
ang3_odoo:
  default_connection: default
  default_logger: '<logger_service_name>' # Instance of \Psr\Log\LoggerInterface (optional)
  # If set, the default logger is used if a connection hasn't one
  connections:
    default:
      url: '%env(resolve:ODOO_API_URL)%'
      database: '%env(resolve:ODOO_API_DATABASE)%'
      user: '%env(resolve:ODOO_API_USERNAME)%'
      password: '%env(resolve:ODOO_API_PASSWORD)%'
      logger: '<logger_service_name>' # Instance of \Psr\Log\LoggerInterface (optional)
  orm:
    enabled: false

最后,设置项目中需要的 .env 变量

ODOO_API_URL=
ODOO_API_DATABASE=
ODOO_API_USERNAME=
ODOO_API_PASSWORD=

使用多个连接(可选)

您可以在 ang3_odoo.connections 部分下添加更多连接。以下是一个示例,用于另一个连接

# app/config/config.yml or config/packages/ang3_odoo.yaml
ang3_odoo:
  # ...
  connections:
    default:
      # ...
    other_connection_name:
      url: '...'
      database: '...'
      user: '...'
      password: '...'
      logger: '<logger_service_name>' # optional

参数 default_connection 用于定义要使用的默认连接。

用法

注册表

如果您想与所有配置的客户端一起工作,那么您可能希望获取 注册表。它按连接名称存储所有配置的客户端。您可以通过依赖注入获取它。

use Ang3\Bundle\OdooBundle\ClientRegistry;

class MyService
{
    private $clientRegistry;

    public function __construct(ClientRegistry $clientRegistry)
    {
        $this->clientRegistry = $clientRegistry;
    }
}

注册表包含三个有用的方法

  • public function set(string $connectionName, Client $client): self 通过连接名称设置客户端。
  • public function get(string $connectionName): Client 获取连接的客户端。如果连接未找到,则抛出 \LogicException
  • public function has(string $connectionName): bool 检查是否存在名为 $connectionName 的连接。

如果您不使用自动注入,您必须将服务作为参数传递给您的服务

# app/config/services.yml or config/services.yaml
# ...
MyClass:
    arguments:
        $clientRegistry: '@ang3_odoo.client_registry'

客户端

直接获取客户端而不与注册表一起工作可能很有用。

例如,通过自动注入获取默认客户端,使用参数 Ang3\Component\Odoo\Client $client

use Ang3\Component\Odoo\Client;

class MyService
{
    private $client;

    public function __construct(Client $client)
    {
        $this->client = $client;
    }
}

如果连接名称是 foo_bar,则自动注入参数是 Ang3\Component\Odoo\Client $fooBarClient

  • 运行命令 php bin/console debug:autowiring Client 以获取自动注入客户端的列表。

当然,如果您不使用自动注入,您必须将服务作为参数传递给您的服务

# app/config/services.yml or config/services.yaml
# ...
App\MyService:
    arguments:
        $client: '@ang3_odoo.client.<connection_name>' # Or '@ang3_odoo.client' for the default connection

对于每个客户端,该扩展包创建一个遵循以下命名约定的公共别名: ang3_odoo.client.<connection_name>

ORM

要启用 ORM 功能,您必须编辑文件 config/packages/ang3_odoo.yaml 以进行配置

ang3_odoo:
  # ...
  orm:
    enabled: true # Do not forget to enable the ORM
    managers:
      default: # connection name to manage
        paths: # List of directories where your Odoo objects are stored
          - '%kernel_project_dir%/src/Odoo/Entity'

用法

通过依赖注入和自动注入轻松获取连接的管理员

namespace App;

use Ang3\Component\Odoo\ORM\ObjectManager;

class MyService
{
    /**
     * @var  ObjectManager
    */
    private $objectManager;

    public function __construct(ObjectManager $objectManager)
    {
        $this->objectManager = $objectManager;
    }
}

如果连接名称是 foo_bar,则自动注入参数是 Ang3\Component\Odoo\ORM\ObjectManager $fooBarObjectManager。默认情况下,默认管理员是自动注入的。

  • 运行命令 php bin/console debug:autowiring ObjectManager 以获取自动注入管理员的列表。

当然,如果您不使用自动注入,您必须将服务作为参数传递给您的服务

# app/config/services.yml or config/services.yaml
# ...
App\MyService:
    arguments:
        $objectManager: '@ang3_odoo.orm.object_manager.<connection_name>' # Or '@ang3_odoo.orm.object_manager' for the default manager

对于每个管理员,该扩展包创建一个遵循以下命名约定的公共别名: ang3_odoo.orm.object_manager.<connection_name>

请阅读ORM包ang3/php-odoo-orm的文档,以了解对象管理器的更多信息。

验证器

本包提供了根据symfony/validator包实现的实用验证器,可以通过ID、域和/或连接验证记录。它依赖于基本的注解。

以下是一个存储公司及发票ID的对象示例

use Ang3\Bundle\OdooBundle\Validator\Constraints as Odoo;

class MyEntity
{
    /**
     * @var int
     *
     * @Odoo\Record("res.company")
     * ...
     */
    private $companyId;

    /**
     * @var int
     *
     * @Odoo\Record(model="account.move", domains="expr.eq('company_id.id', this.companyId)", connection="default")
     * ...
     */
    private $invoiceId;
}

以下是您可以传递给注解的所有选项列表

  • model (必需 字符串) 记录的模型名称。
  • domains (字符串) 一个表达式,其评估必须返回有效的客户端标准。
  • connection (字符串) 要使用的连接名称
    • 默认情况下使用default连接。
  • typeErrorMessage (字符串) 如果值不是正整数时的错误信息
    • 默认信息为:此值必须为正整数。
  • notFoundMessage (字符串) 如果未找到记录时的信息
    • 默认信息为:{{ model_id }}从"{{ model_name }}"的记录未找到。

如您所见,验证器同时使用了symfony/expression-language和客户端提供的表达式构建器。通过这种方式,您可以轻松过滤允许的记录。

以下是传递给评估表达式的变量

  • expr 表达式构建器
  • this 属性/获取器所属的对象
  • user 请求的用户 Symfony\Component\Security\Core\User\UserInterface|null

升级与更新

v0.1.0 (beta-release)

  • 客户端注册表
  • beta ORM
    • 注册表
    • 配置
    • 缓存
  • 记录验证器