나는 PersonType
양식을 가지고 있으며 LegalPersonType
및 양식을 가지고 있으며 둘 모두 PersonType
에서 확장됩니다 (엔터티 수준에서 매핑 됨) 양식에 공통 필드가 있기 때문에 두 양식 모두 PersonType
에서 확장됩니다. 예를 들어,이 SaveFormController에서/orderAction 그런 NaturalPersonType.php
양식 상속 관련 문제
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use Tanane\FrontendBundle\DBAL\Types\CIType;
use Tanane\FrontendBundle\Form\Type\PersonType;
class NaturalPersonType extends PersonType {
public function buildForm(FormBuilderInterface $builder, array $options)
{
parent::buildForm($builder, $options);
$builder
->add('identification_type', 'choice', array(
'label' => 'Número de Cédula',
'choices' => CIType::getChoices()
))
->add('ci', 'number', array(
'required' => true,
'label' => false,
'attr' => array(
'maxlength' => 8,
))
)
->add('lives_in_ccs', 'checkbox', array(
'label' => false,
'required' => false,
'value' => 1,
));
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Tanane\FrontendBundle\Entity\NaturalPerson'
));
}
public function getName()
{
return 'natural_person';
}
}
() 나는이 일을 해요에 대한 코드는 다음과 같습니다
$order = new Orders();
$orderForm = $this->createForm(new OrdersType(array($type)), $order, array('action' => $this->generateUrl('save_order')));
그러나 언제든지 내가이 오류가 양식을 렌더링하려고 :
Neither the property "nat" nor one of the methods "getNat()", "nat()", "isNat()", "hasNat()", "__get()" exist and have public access in class "Tanane\FrontendBundle\Entity\Orders".
관계는 엔티티 수준에서 어떻게 그 오류를 수정합니까? 사전에
덕분에 내가 변경 여기에 사용자의 제안에 따라
1 가능한 솔루션
, OrderType.php
이 내 코드를 양식 :
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use Tanane\FrontendBundle\DBAL\Types\SFType;
class OrdersType extends AbstractType {
/**
* @var string
*/
protected $register_type;
public function __construct($register_type)
{
$this->register_type = $register_type;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
// here goes $builder with default options remove for see less code
if ($this->register_type[0] == "natural")
{
$builder->add('nat', new NaturalPersonType(), array(
'data_class' => 'Tanane\FrontendBundle\Entity\NaturalPerson'
));
}
elseif ($this->register_type[0] == "legal")
{
$builder->add('leg', new LegalPersonType(), array(
'data_class' => 'Tanane\FrontendBundle\Entity\LegalPerson'
));
}
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Tanane\FrontendBundle\Entity\Orders',
'render_fieldset' => FALSE,
'show_legend' => FALSE
));
}
public function getName()
{
return 'orders';
}
}
내가 'mapped' => FALSE
을 추가하여 해결했습니다 각각의 새 FormType에 대해 OrdersType
에 추가하지만 이것이 맞는지는 알 수 없습니다. 또한 여기에 data_class
을 정의하면 NaturalType
은 그 양식에서 기본 옵션을 제거해야합니까? OrdersType
에 직접 액세스 할 수 없으며 그대로 두어야합니까? 문제를 지금 어떻게 해결할 수 있습니까? 내가 뭘 놓치고있어?
안녕하세요, 제 에디션을 사용해 볼 수 있습니까? 난 아직도 당신의 제안 작업 코드를 시도한 후 몇 가지 문제가있어. – ReynierPM
내 대답을 업데이트 –
음 내가이 시점에서 길을 잃었 어, 당신은 코드 예제를 남길 수 있을까? – ReynierPM