我有一个表单,添加了一个调用另一个的字段集和字段集。 我只有一个ManyToOne关系引用另一个实体的ID。 在我的控制器中,我有:
public function juridicaAction()
{
if (!$this->zfcUserAuthentication()->hasIdentity()) {
return $this->redirect()->toRoute('login');
}
$objectManager = $this->getServiceLocator()->get('Doctrine\ORM\EntityManager');
$em = $this->getEntityManager();
$pessoajuridica = new Pessoajuridica();
$localizacao = new Localizacao();
$form = new PJForm($objectManager);
$form->bind($pessoajuridica);
$request = $this->getRequest();
if ($request->isPost()) {
$data = array_merge_recursive(
$this->getRequest()->getPost()->toArray(),
$this->getRequest()->getFiles()->toArray()
);
$form->setData($data);
//var_dump($data);die();
$pessoajuridica->setIdpessoa($em->find("Cadastro\Entity\Pessoa", $this->zfcUserAuthentication()->getIdentity()->getIdPessoa()));
if ($form->isValid()) {
$objectManager->persist($pessoajuridica);
$objectManager->flush();
$this->flashMessenger()->addSuccessMessage('Cadastro efetuado!');
return $this->redirect()->toRoute('fornecedor', array('action'=>'dadosbancarios'));
}
//else var_dump($form->getMessages());die();
}
return new ViewModel(array(
'pessoajuridica' => $pessoajuridica,
'form' => $form
));
}
这个控制器坚持只有pessoajuridica实体,Localizacao不坚持......级联坚持不起作用 MyForm的:
class PJForm extends Form{
public function __construct(ObjectManager $objectManager) {
parent::__construct('pjform');
$this->setAttribute('method', 'POST');
$this->setHydrator(new DoctrineHydrator($objectManager));
$pessoajuridicafieldset = new PessoaJuridicaFieldset($objectManager);
$pessoajuridicafieldset->setName('pessoajuridica');
$pessoajuridicafieldset->setUseAsBaseFieldset(true);
$this->add($pessoajuridicafieldset);
$this->add(array(
'name' => 'submit',
'attributes' => array(
'type' => 'submit',
'value' => 'Continuar',
'class' => 'btn btn-block btn-success',
'id' => 'submitbutton',
),
));
}
Fieldset PessoaJuridicaFieldset:
class PessoaJuridicaFieldset extends Fieldset implements InputFilterProviderInterface {
public function __construct(ObjectManager $objectManager)
{
parent::__construct('pessoajuridica');
$this->setHydrator(new DoctrineHydrator($objectManager))
->setObject(new Pessoajuridica());
$this->add(array(
'type' => 'Zend\Form\Element\Hidden',
'name' => 'id'
));
$cnpj = new Text('cnpj');
$cnpj->setLabel('CNPJ')
->setAttributes(array(
'class' => 'form-control',
'id' =>'cnpj',
));
$this->add($cnpj);
$nomefantasia = new Text('nomefantasia');
$nomefantasia->setLabel('Nome Fantasia')
->setAttributes(array(
'class' => 'form-control',
'id' =>'nomefantasia',
));
$this->add($nomefantasia);
$logotipo = new File('logotipo');
$logotipo->setLabel('Logotipo')
->setAttributes(array(
'class' => 'form-control',
'id' =>'logotipo',
));
$this->add($logotipo);
$localizacao = new LocalizacaoFieldset($objectManager);
$localizacao->setName('localizacao');
$localizacao->setUseAsBaseFieldset(true);
$this->add($localizacao);
}
public function getInputFilterSpecification()
{
return array(
'cnpj' => array(
'required' => true
),
'nomefantasia' => array(
'required' => true
),
);
}}
Fielset Localizacao:
class LocalizacaoFieldset extends Fieldset implements InputFilterProviderInterface{
public function __construct(ObjectManager $objectManager)
{
parent::__construct('localizacao');
$this->setHydrator(new DoctrineHydrator($objectManager))
->setObject(new Localizacao());
$cep = new Text('cep');
$cep->setLabel('Cep')
->setAttributes(array(
'class' => 'form-control',
'id' =>'cep',
));
$this->add($cep);
$logradouro = new Text('logradouro');
$logradouro->setLabel('Logradouro')
->setAttributes(array(
'class' => 'form-control',
'id' =>'logradouro',
));
$this->add($logradouro);
$numero = new Text('numero');
$numero->setLabel('Número');
$numero->setAttributes(array(
'class' => 'form-control',
'id' =>'numero'
));
$this->add($numero);
$bairro = new Text('bairro');
$bairro->setLabel('Bairro');
$bairro->setAttributes(array(
'class' => 'form-control',
'id' =>'bairro'
));
$this->add($bairro);
$complemento = new Text('complemento');
$complemento->setLabel('Complemento');
$complemento->setAttributes(array(
'class' => 'form-control',
'id' =>'complemento'
));
$this->add($complemento);
$referencia = new Text('referencia');
$referencia->setLabel('Referencia');
$referencia->setAttributes(array(
'class' => 'form-control',
'id' =>'referencia'
));
$this->add($referencia);
$cidade = new Text('cidade');
$cidade->setLabel('Cidade');
$cidade->setAttributes(array(
'class' => 'form-control',
'id' =>'cidade'
));
$this->add($cidade);
$this->add(array(
'name' => 'iduf',
'type' => 'DoctrineModule\Form\Element\ObjectSelect',
'options' => array(
'label' => 'Estado',
'object_manager' => $objectManager,
'target_class' => 'Cadastro\Entity\Uf',
'property' => 'uf'
),
'attributes' => array(
'required' => true,
'class' => 'form-control'
)
));
}
public function getInputFilterSpecification()
{
return array(
'cep' => array(
'required' => true,
),
'logradouro' => array(
'required' => true,
),
'numero' => array(
'required'=> TRUE,
),
'bairro' => array(
'required' => true,
),
'cidade' => array(
'required' => true,
),
'iduf' => array(
'required'=> TRUE,
),
);
}}
所以,我的意思是:坚持pessoajuridica和localizacao ..
答案 0 :(得分:0)
我手动和工作..但如果有任何其他自动,可以发布。谢谢。
... $localizacao->setBairro($form->get('pessoajuridica')->get('localizacao')->get('bairro')->getValue());
$localizacao->setCep($form->get('pessoajuridica')->get('localizacao')->get('cep')->getValue());
$localizacao->setCidade($form->get('pessoajuridica')->get('localizacao')->get('cidade')->getValue());
$localizacao->setComplemento($form->get('pessoajuridica')->get('localizacao')->get('complemento')->getValue());
$localizacao->setIduf($em->find("Cadastro\Entity\Uf", $form->get('pessoajuridica')->get('localizacao')->get('iduf')->getValue()));
$localizacao->setLogradouro($form->get('pessoajuridica')->get('localizacao')->get('logradouro')->getValue());
$localizacao->setNumero($form->get('pessoajuridica')->get('localizacao')->get('numero')->getValue());
$localizacao->setReferencia($form->get('pessoajuridica')->get('localizacao')->get('referencia')->getValue());
//var_dump($localizacao);die();
$pessoajuridica->setIdpessoa($em->find("Cadastro\Entity\Pessoa", $this->zfcUserAuthentication()->getIdentity()->getIdPessoa()));
if ($form->isValid()) {
$objectManager->persist($localizacao);
$pessoajuridica->setIdlocalizacaocomercial($localizacao);
$objectManager->persist($pessoajuridica);
$objectManager->flush(); ....