2015-05-12 6 views
-1

У меня есть форма, добавив набор полей и набор полей, которые вызывали другого. У меня есть только одно отношение ManyToOne, ссылающееся на идентификатор другого объекта. в моем контроллере у меня есть:Fieldset zf2 - заполнить 2 объекта

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 сущности, Localização не persist..the каскада не проходит не работает 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, 
     ), 
    ); 

}} 

Итак, мой probrem является: сохраняются pessoajuridica и Localização ..

+0

Можете ли вы убрать свое форматирование кода, свои объяснения и разъяснить, что вы на самом деле просите? Таким образом, очень сложно понять, где может возникнуть проблема или ошибка. – Jeff

+0

Отредактированный Джефф .. если и мог бы мне помочь .. tks :) –

ответ

0

я сделал вручную и work..but, если есть какой-либо другой автоматически, могут оставлять сообщения. Спасибо.

... $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(); ....