В Sylius я хочу добавить 1 таблицу для клиента, так что для определенного типа клиента (например, VIP) необходимо заполнить дополнительные поля. (Отношение один к одному)
Сущность CustomerExtra
создана. Тип формы CustomerExtraType
создан.
Первоначально я создал тип формы extends AbstractType. В форме клиента показаны эти дополнительные поля, но запись не будет сохранена.
Тогда я обнаружил, что Sylius должен вместо этого расширить AbstractResourceType, чтобы я внес изменения, но с ошибкой:
Cannot autowire service "AppBundle\Form\Type\CustomerExtraType": argument "$dataClass" of method "Sylius\Bundle\ResourceBundle\Form\Type\AbstractResourceType::__construct()" is type-hinted "string", you should configure its value explicitly.
Вот код:
service.yml
services:
app.form.type.customerextra:
class: AppBundle\Form\Type\CustomerExtraType
tags:
- { name: form.type}
config.yml
sylius_resource:
resources:
app.customerextra:
driver: doctrine/orm
classes:
model: AppBundle\Entity\CustomerExtra
form: AppBundle\Form\Type\CustomerExtraType
Клиентский субъект
namespace AppBundle\Entity;
use AppBundle\Entity\CustomerExtra as BaseCustomerExtra;
use Sylius\Component\Core\Model\Customer as BaseCustomer;
class Customer extends BaseCustomer
{
/**
* @var CustomerExtra|null
*/
protected $customerextra;
public function __construct(BaseCustomerExtra $customerextra)
{
$this->createdAt = new \DateTime();
$this->customerextra = $customerextra;
}
/**
* {@inheritdoc}
*/
public function getCustomerExtra(): ?BaseCustomerExtra
{
return $this->customerextra;
}
/**
* {@inheritdoc}
*/
public function setCustomerExtra(BaseCustomerExtra $customerextra): void
{
$this->customerextra = $customerextra;
$this->customerextra->setCustomer($this);
$customerextra->setCustomer($this);
}
CustomerExtra Entity
private $customer;
/**
* {@inheritdoc}
*/
public function getCustomer(): ?Customer
{
return $this->customer;
}
/**
* {@inheritdoc}
*/
public function setCustomer(?Customer $customer): void
{
$this->customer = $customer;
}
CustomerProfileType
$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event): void {
$customer = $event->getData();
$event->getForm()->add('customerextra', CustomerExtraType::class, [
]);
});
CustomerExtraType
namespace AppBundle\Form\Type;
use AppBundle\Entity\CustomerExtra;
use Symfony\Component\Form\FormBuilderInterface;
use Sylius\Bundle\ResourceBundle\Form\Type\AbstractResourceType;
class CustomerExtraType extends AbstractResourceType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('customer_extra1', TextType::class, [
'required' => false,
'label' => 'sylius.form.customer.customer_extra1',
])
->add('customer_extra2', NumberType::class, [
'required' => false,
'label' => 'sylius.form.customer.customer_extra2',
])
;
}
public function getBlockPrefix()
{
return 'app_customerextra';
}
public function getName()
{
return 'admin_customerextra';
}
}
Пожалуйста, помогите.