bestit/commercetools-odm-bundle

通过 doctrine.commons api 使 commercetools 数据库可访问。

1.0.0 2020-02-10 08:50 UTC

README

通过 doctrine.commons api 使 commercetools 数据库可访问。它仍然在底层使用 commmercetools/php-sdk

安装

步骤 1: 下载包

打开命令行控制台,进入您的项目目录,然后执行以下命令以下载此包的最新稳定版本

$ composer require bestit/commercetools-odm-bundle

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

步骤 2: 启用包

然后,通过将其添加到项目 app/AppKernel.php 文件中注册的包列表中启用该包。

<?php
// app/AppKernel.php

// ...
class AppKernel extends Kernel
{
    public function registerBundles()
    {
        $bundles = array(
            // ...

            new BestIt\CommercetoolsODMBundle\BestItCommercetoolsODMBundle(),
        );

        // ...
    }

    // ...
}

步骤 3: 配置包

# Default configuration for "BestItCommercetoolsODMBundle"
bestit_commercetools_odm:

    # Please provide the service id for your commercetools client.
    client_service_id:    ~ # Required

    # Please provide the service id for your commercetools request async pool.
    pool_service_id:      ~

此包包含一个客户端工厂,您可以使用它来创建客户端。示例

services:
    Commercetools\Core\Client:
        factory: 'BestIt\CommercetoolsODMBundle\Factory\ClientFactory:create'
        arguments:
            - {client_id: '%env(COMMERCETOOLS_CLIENT_ID)%', client_secret: '%env(COMMERCETOOLS_CLIENT_SECRET)%', project: '%env(COMMERCETOOLS_PROJECT)%', scope: ['manage_project'] }
            - {locale: 'de', languages: ['de'] }

    BestIt\CommercetoolsODMBundle\Factory\ClientFactory:
        class: BestIt\CommercetoolsODMBundle\Factory\ClientFactory
        arguments: ['@cache.app', '@logger']

用法

带有服务容器的事件监听器

如果您将服务标记为 best_it_commercetools_odm.event_listener,则可以向典型生命周期事件添加事件监听器。但不要忘记在您的标记中使用键 event 的事件名称。

示例

# app/config/services.yml
services:
    app.tokens.action_listener:
        class: AppBundle\EventListener\TokenListener
        arguments: ['%tokens%']
        tags:
            - { name: best_it_commercetools_odm.event_listener, event: postPersist }

服务的方法应与事件名称匹配。

服务

服务 best_it.commercetools_odm.manager 提供了扩展的 Doctrine\Common\Persistence\ObjectManager

服务的方法应与事件名称匹配。

过滤器

您可以在请求上添加多个过滤器。只需创建一个过滤器,实现 FilterInterface,并使用 best_it_commercetools_odm.filter 标记服务。过滤器将获取原始创建的请求,并在请求发送之前应用。

示例

// ProductFilter.php
class ProductFilter implements FilterInterface
{
    /**
     * {@inheritdoc}
     */
    public function getKey()
    {
        return 'product';
    }

    /**
     * {@inheritdoc}
     */
    public function apply($request)
    {
        $request->setExpands(['masterVariant.attributes[*].value', 'productType', 'categories[*].ancestors[*]']);
        
        $request->channel('xyz');
        $request->currency('EUR');
    }
}
# app/config/services.yml
services:
    app.filter.product_filter:
        class: AppBundle\Filter\ProductFilter
        tags:
            - { name: best_it_commercetools_odm.filter }

现在您可以在需要时应用一个或多个过滤器。

    app.repository.product_projection:
        class: BestIt\CommercetoolsODM\Model\ProductProjectionRepository
        factory: ["@best_it.commercetools_odm.manager", getRepository]
        arguments:
            - Commercetools\Core\Model\Product\ProductProjection
        calls:
            - [filter, ['projection', 'projection-categories']]