ang3 / odoo-bundle
Symfony 扩展包,用于管理您的 Odoo 数据库。
Requires
- php: >=7.2.5
- ang3/php-odoo-api-client: ^6.1
- ang3/php-odoo-orm: ^0.1
- symfony/cache: >=4.2
- symfony/config: >=4.2
- symfony/console: >=4.2
- symfony/dependency-injection: >=4.2
- symfony/expression-language: >=4.2
- symfony/http-kernel: >=4.2
- symfony/security-core: >=4.2
- symfony/validator: >=4.2
Requires (Dev)
- roave/security-advisories: dev-master
- symfony/phpunit-bridge: ^3.4 || ^4.0
This package is auto-updated.
Last update: 2024-09-14 04:38:55 UTC
README
此扩展包是 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
- 注册表
- 配置
- 缓存
- 记录验证器