Skip to content

Commit

Permalink
Use extension instead of changing the existing forms in ProductBundle
Browse files Browse the repository at this point in the history
  • Loading branch information
TheMilek authored and GSadee committed May 8, 2024
1 parent 4ddaf3a commit c046fb7
Show file tree
Hide file tree
Showing 6 changed files with 64 additions and 16 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
<?php

/*
* This file is part of the Sylius package.
*
* (c) Sylius Sp. z o.o.
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

declare(strict_types=1);

namespace Sylius\Bundle\AdminBundle\Form\Extension;

use Sylius\Bundle\AdminBundle\Form\Type\ProductAutocompleteChoiceType;
use Sylius\Bundle\ProductBundle\Form\Type\ProductAssociationsType;
use Sylius\Component\Product\Model\ProductAssociationTypeInterface;
use Symfony\Component\Form\AbstractTypeExtension;
use Symfony\Component\OptionsResolver\OptionsResolver;

final class ProductAssociationsTypeExtension extends AbstractTypeExtension
{
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'entry_type' => ProductAutocompleteChoiceType::class,
'entry_options' => fn (ProductAssociationTypeInterface $productAssociationType) => [
'label' => $productAssociationType->getName(),
'multiple' => true,
],
]);
}

/**
* @return iterable<class-string>
*/
public static function getExtendedTypes(): iterable
{
return [ProductAssociationsType::class];
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,10 @@
<tag name="form.type_extension" />
</service>

<service id="sylius_admin.form.extension.type.product_associations" class="Sylius\Bundle\AdminBundle\Form\Extension\ProductAssociationsTypeExtension">
<tag name="form.type_extension" />
</service>

<service id="sylius.form.extension.type.product_image" class="Sylius\Bundle\AdminBundle\Form\Extension\ProductImageTypeExtension">
<argument>%sylius.model.product_variant.class%</argument>
<tag name="form.type_extension" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

<container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
<services>
<service id="sylius_admin.form.extension.product_type" class="Sylius\Bundle\AdminBundle\Form\Extension\ProductTypeExtension">
<service id="sylius_admin.form.extension.product" class="Sylius\Bundle\AdminBundle\Form\Extension\ProductTypeExtension">
<tag name="form.type_extension" />
</service>
</services>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,14 @@
namespace Sylius\Bundle\ProductBundle\Form\Type;

use Doctrine\Common\Collections\Collection;
use Sylius\Bundle\AdminBundle\Form\Type\ProductAutocompleteChoiceType;
use Sylius\Bundle\ResourceBundle\Form\Type\FixedCollectionType;
use Sylius\Component\Product\Model\ProductAssociationInterface;
use Sylius\Component\Product\Model\ProductAssociationTypeInterface;
use Sylius\Component\Product\Model\ProductInterface;
use Sylius\Component\Resource\Repository\RepositoryInterface;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\DataTransformerInterface;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

Expand All @@ -46,11 +46,10 @@ public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'entries' => $this->productAssociationTypeRepository->findAll(),
'entry_type' => TextType::class,
'entry_name' => fn (ProductAssociationTypeInterface $productAssociationType) => $productAssociationType->getCode(),
'entry_type' => ProductAutocompleteChoiceType::class,
'entry_options' => fn (ProductAssociationTypeInterface $productAssociationType) => [
'label' => $productAssociationType->getName(),
'multiple' => true,
],
]);
}
Expand All @@ -62,6 +61,6 @@ public function getParent(): string

public function getBlockPrefix(): string
{
return 'sylius_admin_product_associations';
return 'sylius_product_associations';
}
}
3 changes: 3 additions & 0 deletions src/Sylius/Bundle/ProductBundle/Form/Type/ProductType.php
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,9 @@ public function buildForm(FormBuilderInterface $builder, array $options): void
'by_reference' => false,
'label' => false,
])
->add('associations', ProductAssociationsType::class, [
'label' => false,
])
;
}

Expand Down
22 changes: 11 additions & 11 deletions src/Sylius/Bundle/ProductBundle/Resources/config/services/form.xml
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,12 @@
<tag name="form.type" />
</service>

<service id="sylius.form.type.sylius_product_associations" class="Sylius\Bundle\ProductBundle\Form\Type\ProductAssociationsType">
<argument type="service" id="sylius.repository.product_association_type" />
<argument type="service" id="sylius.form.type.data_transformer.products_to_product_associations" />
<tag name="form.type" />
</service>

<service id="sylius.form.type.product_attribute" class="Sylius\Bundle\ProductBundle\Form\Type\ProductAttributeType">
<argument>%sylius.model.product_attribute.class%</argument>
<argument>%sylius.form.type.product_attribute.validation_groups%</argument>
Expand Down Expand Up @@ -199,20 +205,14 @@
<argument type="service" id="request_stack" />
</service>

<service id="sylius.form.type.product_option_value_choice" class="Sylius\Bundle\ProductBundle\Form\Type\ProductOptionValueChoiceType">
<argument type="service" id="sylius.available_product_option_values_resolver" />
<tag name="form.type" />
</service>

<service id="sylius.form.type.sylius_product_associations" class="Sylius\Bundle\ProductBundle\Form\Type\ProductAssociationsType">
<argument type="service" id="sylius.repository.product_association_type" />
<argument type="service" id="sylius.form.type.data_transformer.products_to_product_associations" />
<tag name="form.type" />
</service>

<service id="sylius.form.type.data_transformer.products_to_product_associations" class="Sylius\Bundle\ProductBundle\Form\DataTransformer\ProductsToProductAssociationsTransformer">
<argument type="service" id="sylius.factory.product_association" />
<argument type="service" id="sylius.repository.product_association_type" />
</service>

<service id="sylius.form.type.product_option_value_choice" class="Sylius\Bundle\ProductBundle\Form\Type\ProductOptionValueChoiceType">
<argument type="service" id="sylius.available_product_option_values_resolver" />
<tag name="form.type" />
</service>
</services>
</container>

0 comments on commit c046fb7

Please sign in to comment.