Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?php
/**
* @copyright Copyright (C) Ibexa AS. All rights reserved.
* @license For full copyright and license information view LICENSE file distributed with this source code.
*/
declare(strict_types=1);

namespace App\DependencyInjection;

use Ibexa\ProductCatalog\Local\Persistence\Legacy\Attribute\Float\StorageDefinition;
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;

class AddFloatStorageDefinitionTag implements CompilerPassInterface
{
public function process(ContainerBuilder $container): void
{
$container->getDefinition(StorageDefinition::class)
->addTag('ibexa.product_catalog.attribute.storage_definition', ['type' => 'percent']);
}
}
20 changes: 20 additions & 0 deletions code_samples/catalog/custom_attribute_type/src/Kernel.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?php declare(strict_types=1);

namespace App;

use App\DependencyInjection\AddFloatStorageDefinitionTag;
use Symfony\Bundle\FrameworkBundle\Kernel\MicroKernelTrait;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\HttpKernel\Kernel as BaseKernel;

class Kernel extends BaseKernel
{
use MicroKernelTrait;

public function build(ContainerBuilder $container): void
{
parent::build($container);

$container->addCompilerPass(new AddFloatStorageDefinitionTag());
}
}
4 changes: 2 additions & 2 deletions deptrac.baseline.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,8 @@ deptrac:
- Ibexa\CorporateAccount\Event\ApplicationWorkflowEvents
- Ibexa\CorporateAccount\Persistence\Legacy\ApplicationState\HandlerInterface
- Ibexa\CorporateAccount\Persistence\Values\ApplicationStateUpdateStruct
App\DependencyInjection\AddFloatStorageDefinitionTag:
- Ibexa\ProductCatalog\Local\Persistence\Legacy\Attribute\Float\StorageDefinition
App\Discounts\Condition\IsAccountAnniversary:
- Ibexa\Discounts\Value\AbstractDiscountExpressionAware
App\Discounts\Condition\IsAccountAnniversaryConditionFactory:
Expand Down Expand Up @@ -143,8 +145,6 @@ deptrac:
- Ibexa\Bundle\Shipping\Form\Type\ShippingMethodChoiceType
App\GraphQL\Schema\MyCustomFieldDefinitionMapper:
- Ibexa\GraphQL\Schema\Domain\Content\Mapper\FieldDefinition\DecoratingFieldDefinitionMapper
App\Kernel:
- Ibexa\Bundle\Core\DependencyInjection\IbexaCoreExtension
App\Migrations\Action\AssignSection:
- Ibexa\Migration\ValueObject\Step\Action
App\Migrations\Action\AssignSectionExecutor:
Expand Down
17 changes: 16 additions & 1 deletion docs/pim/create_custom_attribute_type.md
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,9 @@ Register the converter as a service and tag it with `ibexa.product_catalog.attri

### Storage definition

Next, prepare a `PercentStorageDefinition` class, which implements `Ibexa\Contracts\ProductCatalog\Local\Attribute\StorageDefinitionInterface`.
You can either create a new storage definition or use an existing one.

To create a new storage definition, prepare a `PercentStorageDefinition` class, which implements `Ibexa\Contracts\ProductCatalog\Local\Attribute\StorageDefinitionInterface`.

``` php
[[= include_file('code_samples/catalog/custom_attribute_type/src/Attribute/Percent/Storage/PercentStorageDefinition.php') =]]
Expand All @@ -172,6 +174,19 @@ Register the storage definition as a service and tag it with `ibexa.product_cata
[[= include_file('code_samples/catalog/custom_attribute_type/config/custom_services.yaml', 41, 44) =]]
```

If you prefer to use an existing storage definition, you need to create a Storage Definition Tag CompilerPass `src/DependencyInjection/AddFloatStorageDefinitionTag.php`:

``` php
[[= include_file('code_samples/catalog/custom_attribute_type/src/DependencyInjection/AddFloatStorageDefinitionTag.php') =]]
```

Add the CompilerPass to the container.
Do it in a `src/Kernel.php` file or in your Bundle class:

``` php hl_lines="5 7-8 14-20"
[[= include_file('code_samples/catalog/custom_attribute_type/src/Kernel.php') =]]
```

## Use new attribute type

In the back office you can now add a new Percent attribute to your product type and create a product with it.
Expand Down
Loading