Fieldset zf2 - 填充2个实体

时间:2015-05-12 00:05:24

标签: php zend-framework2 doctrine

我有一个表单,添加了一个调用另一个的字段集和字段集。 我只有一个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 ..

1 个答案:

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