Sylius Beta.1で編集可能なフィールドとして製品コードを使用する場合は、現在の製品タイプにProductType拡張を作成し、コードフィールドを編集可能にするカスタムサブスクライバを追加できます。私は私のバンドルにこれをしなかったし、それが動作します:
namespace App\Bundle\Form\EventListener;
/* add required namespaces */
/**
* Custom code subscriber
*/
class CustomCodeFormSubscriber implements EventSubscriberInterface
{
private $type;
private $label;
/**
* @param string $type
* @param string $label
*/
public function __construct($type = TextType::class, $label = 'sylius.ui.code')
{
$this->type = $type;
$this->label = $label;
}
/**
* {@inheritdoc}
*/
public static function getSubscribedEvents()
{
return [
FormEvents::PRE_SET_DATA => 'preSetData',
];
}
/**
* @param FormEvent $event
*/
public function preSetData(FormEvent $event)
{
$disabled = false;
$form = $event->getForm();
$form->add('code', $this->type, ['label' => $this->label, 'disabled' => $disabled]);
}
}
フォームの拡張機能を作成し、カスタム加入者を使用します:
はfalseに無効状態を変更しますwchich加入者クラスを作成
namespace App\Bundle\Form\Extension;
use App\Bundle\Form\EventListener\CustomCodeFormSubscriber;
use Symfony\Component\Form\AbstractTypeExtension;
use Symfony\Component\Form\FormBuilderInterface;
use Sylius\Bundle\ProductBundle\Form\Type\ProductType;
/* use other required namespaces etc */
/**
* Extended Product form type
*/
class ProductTypeExtension extends AbstractTypeExtension
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
/* custom stuff for ur form */
$builder->addEventSubscriber(new CustomCodeFormSubscriber());
}
public function getExtendedType()
{
return ProductType::class;
}
}
フォームを登録しますサービスとしての拡張:
app.form.extension.type.product:
class: App\Bundle\Form\Extension\ProductTypeExtension
tags:
- { name: form.type_extension, priority: -1, extended_type: Sylius\Bundle\ProductBundle\Form\Type\ProductType }
どちらの方法でもフォームをオーバーライドする必要があります。オプション2は、ベスト。ドキュメンテーション - http://docs.sylius.org/en/latest/customization/form.htmlにフォームをオーバーライドするページがあります。バリアントとプロダクトの両方をオーバーライドする必要があるかもしれませんが、おそらく1つだけかもしれません。私はしばらくコードをチェックアウトしていない – Brett