josespinal/odoo-rpc
Composer 安装命令:
composer require josespinal/odoo-rpc
包简介
PHP Odoo RPC connector with JSON-RPC and XML-RPC support, prepared for Laravel integration
README 文档
README
Note: This package is a fork of obuchmann/odoo-jsonrpc with several improvements:
- Added XML-RPC support alongside JSON-RPC
- Enhanced Laravel integration with proper service provider
- Added Laravel Collection support for search results
- Improved type safety and error handling
- Added convenient methods like
first()for better developer experience- Better PHP 8.0+ support
Connect to odoo via the json-rpc or xml-rpc api. If you are in a laravel project, this package registers a provider. But laravel is not required for this package.
Installation
You can install the package via composer:
composer require josespinal/odoo-rpc
The service provider will automatically register itself if you are in a laravel project.
You can publish the config file with:
php artisan vendor:publish --provider="JoseSpinal\OdooRpc\OdooServiceProvider" --tag="config"
Usage
Protocol Selection
This package supports both JSON-RPC and XML-RPC protocols. You can specify which protocol to use in your configuration:
// In your .env file ODOO_PROTOCOL=json-rpc # or xml-rpc // Or in your code $config = new Config( database: 'odoo', host: 'http://localhost:8069', username: 'admin', password: 'password', protocol: 'xml-rpc' // or 'json-rpc' );
Basic Usage
use JoseSpinal\OdooRpc\Odoo; use JoseSpinal\OdooRpc\Odoo\Request\Arguments\Domain; $this->host = 'http://localhost:8069'; $this->username = 'admin'; $this->password = 'password'; $this->database = 'odoo'; // Connect to Odoo $odoo = new Odoo(new Odoo\Config($database, $host, $username, $password)); $odoo->connect(); // Check Access rights (bool) $check = $odoo->checkAccessRights('res.partner', 'read'); // Check Access rights in model syntax $check = $odoo->model('res.partner') ->can('read'); // Use Domain for Search $isCompanyDomain = (new Domain())->where('is_company', '=', true); $companyIds = $odoo->search('res.partner', $isCompanyDomain); // read ids $companies = $odoo->read('res.partner', $companyIds); // search_read with model Syntax $companies = $odoo->model('res.partner') ->where('is_company', '=', true) ->get(); // search_read with single item $company = $odoo->model('res.partner') ->where('is_company', '=', true) ->where('name', '=', 'My Company') ->first(); // create with model syntax $partner = $odoo->model('res.partner') ->create([ 'name' => 'My Company', 'is_company' => true ]); // update with model syntax $partner = $odoo->model('res.partner') ->where('name', '=', 'My Company') ->update([ 'name' => 'My New Company' ]); // direct update by id $myCompanyId = 1; $partner = $odoo->updateById('res.partner', $myCompanyId, [ 'name' => 'My New Company' ]); // delete by id $odoo->deleteById('res.partner', $myCompanyId);
Laravel Usage
class Controller{ public function index(\JoseSpinal\OdooRpc\Odoo $odoo){ // Find Model by Id $product = $odoo->find('product.template', 1); // Update Model by ID $this->odoo->updateById('product.product', $product->id, [ 'name' => $name, ]); // Create returning ID $id = $this->odoo ->create('res.partner', [ 'name' => 'Bobby Brown' ]); // Search for Models with or $partners = $this->odoo->model('res.partner') ->where('name', '=', 'Bobby Brown') ->orWhere('name', '=', 'Gregor Green') ->limit(5) ->orderBy('id', 'desc') ->get(); // Update by Query $updateResponse = $this->odoo ->model('res.partner') ->where('name', '=', 'Bobby Brown') ->update([ 'name' => 'Dagobert Duck' ]); } }
Laravel Models
Laravel Models are implemented with Attributes
#[Model('res.partner')] use JoseSpinal\OdooRpc\Odoo\OdooModel; class Partner extends OdooModel { #[Field] public string $name; #[Field('email')] public ?string $email; } class Controller{ public function index(){ // Find Model by Id $partner = Partner::find(1); // Search Model $partner = Partner::query() ->where('name', '=', 'Azure Interior') ->first(); // Update Model $partner->name = "Dagobert Duck"; $partner->save(); // Create returning ID $partner = new Partner(); $partner->name = 'Tester'; $partner->save(); } }
Casts
You can define a cast for your models. This is useful if you want to convert odoo fields to a specific type. There are some predefined casts for date and datetime fields.
Casts are global and can be registered in the Odoo class.
// The basic datetime cast \JoseSpinal\OdooRpc\Odoo::registerCast(new Odoo\Casts\DateTimeCast()); // a datetime cast that respects the timezone \JoseSpinal\OdooRpc\Odoo::registerCast(new Odoo\Casts\DateTimeCast('Europe/Berlin')); // you can write custom casts by extending the Obuchmann\OdooJsonRpc\Odoo\Casts\Cast class // example DateTimeCast class DateTimeCast extends Cast { public function getType(): string { return \DateTime::class; } public function cast($raw) { if($raw){ try { return new \DateTime($raw); } catch (\Exception) {} // If no valid Date return null } return null; } public function uncast($value) { if($value instanceof \DateTime){ return $value->format('Y-m-d H:i:s'); } } }
For more examples take a look at the tests directory.
Tests
composer test
josespinal/odoo-rpc 适用场景与选型建议
josespinal/odoo-rpc 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 253 次下载、GitHub Stars 达 0, 最近一次更新时间为 2025 年 02 月 13 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「php」 「xmlrpc」 「laravel」 「jsonrpc」 「ERP」 「odoo」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 josespinal/odoo-rpc 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 josespinal/odoo-rpc 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 josespinal/odoo-rpc 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
A collection of server-side addons that might be of use for development of xml-rpc (and json-rpc) based applications
package of the library classes to provide XmlRpc routines for accessing revive ad servers
Connect your PHP driven web application with Open ERP
Alfabank REST API integration
Service Provider for ArticleBuilder.net API & XMLRPClientWordpress Blog Posting
It is a modern, lightweight, cross-language, cross-platform, object-oriented, high performance, remote dynamic communication middleware. It is not only easy to use, but powerful. You just need a little time to learn, then you can use it to easily construct cross language cross platform distributed a
统计信息
- 总下载量: 253
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 22
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2025-02-13