Yes

I dont need validation Cidade. It is only object associated with Parceiro.

When I create new Cidade, I use another validation group.

Validation.xml:

<?xml version="1.0" encoding="UTF-8"?>
<constraint-mapping xmlns="http://symfony.com/schema/dic/constraint-mapping";
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
    xsi:schemaLocation="http://symfony.com/schema/dic/constraint-mapping
http://symfony.com/schema/dic/services/constraint-mapping-1.0.xsd";>

    <class name="MCP\AdminBundle\Entity\Cidade">
        <property name="nome">
            ......

            <constraint name="MCP\AdminBundle\Validator\Unique">
                <option name="property">nome</option>
                <option name="entity">MCP\AdminBundle\Entity\Cidade</option>
                <option name="message">Cidade já cadastrada</option>
                <option name="groups">NewCidade</option>
            </constraint>
        </property>
    </class>

    .......

    <class name="MCP\AdminBundle\Entity\Parceiro">
        <property name="senha">
            <constraint name="NotNull">
                <option name="groups">NewParceiro</option>
            </constraint>
        </property>
    </class>

    ...............

</constraint-mapping>

ParceiroType:

<?php

namespace MCP\AdminBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;

class ParceiroType extends AbstractType {


    public function buildForm(FormBuilder $builder, array $options)
    {

    ...............

    }

    public function getDefaultOptions(array $options)
    {
        return array(
            'data_class' => 'MCP\AdminBundle\Entity\Parceiro',
            'validation_groups' => 'NewParceiro',
        );
    }

}

CidadeType:
<?php

namespace MCP\AdminBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;

class CidadeType extends AbstractType {


    public function buildForm(FormBuilder $builder, array $options)
    {

        ..............
    }

    public function getDefaultOptions(array $options)
    {
        return array(
            'data_class' => 'MCP\AdminBundle\Entity\Cidade',
            'validation_groups' => 'NewCidade'
        );
    }

}

Do you understand?

Tanks


2011/5/11 Donald Tyler <chekot...@gmail.com>

> Ah, that makes sense.
>
> So the validation framework was not taking into account that the Cidade was
> already persisted, and was assuming it was a duplicate. So now you're going
> to use validation groups to exclude the Cidade from the validation?
>
>
> On Wed, May 11, 2011 at 7:10 AM, elcabong <elcabong....@gmail.com> wrote:
>
>> The solution is  validation groups.
>>
>> Tanks
>>
>> On 10 maio, 08:53, elcabong <elcabong....@gmail.com> wrote:
>> > Controller:
>> >
>> > namespace MCP\AdminBundle\Controller;
>> >
>> > use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
>> > use MCP\AdminBundle\Form\ParceiroType;
>> > use Symfony\Component\HttpFoundation\RedirectResponse;
>> > use Symfony\Bundle\FrameworkBundle\Controller\Controller;
>> >
>> > class ParceiroController extends Controller
>> > {
>> >
>> >         ....
>> >
>> >         public function createAction()
>> >     {
>> >         $form = $this->get('form.factory')->create(new ParceiroType());
>> >
>> >         $form->bindRequest($this->get('request'));
>> >
>> >         if($form->isValid()) {
>> >
>> >                 $this->get('admin.repository.parceiro')->save($form-
>> >
>> > >getData());
>> >
>> >             $this->get('session')->setFlash('msg.add.sucess',
>> > 'success');
>> >             return
>> $this->redirect($this->generateUrl('admin_parceiro_list'));
>> >
>> >         }
>> >
>> >         return
>> $this->get('templating')->renderResponse('MCPAdminBundle:Parceiro:new.html.twig',
>> array(
>> >
>> >                 'form' => $form->createView()
>> >         ));
>> >
>> >     }
>> >
>> >    ......
>> >
>> > }
>> >
>> > Repository:
>> >
>> > namespace MCP\AdminBundle\Repository;
>> >
>> > use Symfony\Component\Security\Core\Encoder
>> > \MessageDigestPasswordEncoder;
>> > use MCP\AdminBundle\Entity\Parceiro;
>> > use Doctrine\ORM\EntityRepository;
>> >
>> > /**
>> >  * ParceiroRepo
>> >  *
>> >  * This class was generated by the Doctrine ORM. Add your own custom
>> >  * repository methods below.
>> >  */
>> > class ParceiroRepo extends EntityRepository
>> > {
>> >         public function save(Parceiro $parceiro) {
>> >
>> >                 $parceiro->setSalt(md5(time()));
>> >                 $password = $parceiro->getSenha();
>> >
>> >                 $encoder = new MessageDigestPasswordEncoder('sha512',
>> true, 10);
>> >                 $encodePassword = $encoder->encodePassword($password,
>> $parceiro-
>> >
>> > >getSalt());
>> >
>> >                 $parceiro->setSenha($encodePassword);
>> >
>> >                 $objectManager = $this->getEntityManager();
>> >                 $objectManager->persist($parceiro);
>> >                 $objectManager->flush();
>> >         }
>> >
>> >         .....
>> >
>> > }
>> >
>> > Anything else??
>> >
>> > Tanks.
>> >
>> > On 9 maio, 21:58, Donald Tyler <chekot...@gmail.com> wrote:
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> > > The only thing I can think is happening is that the Cidade is becoming
>> > > detached from the Entity Manager somehow, and when you persist the new
>> > > Parceiro, it's actually trying to persist the Cidade again.
>> >
>> > > Can you post the full code for the Controller action that's throwing
>> the
>> > > Unique Constraint violation?
>> >
>> > > On Mon, May 9, 2011 at 9:19 AM, elcabong <elcabong....@gmail.com>
>> wrote:
>> > > > Yes
>> >
>> > > > What can I try to do for this not to happen??
>> >
>> > > > Tanks
>> >
>> > > > On May 9, 9:51 am, Donald Tyler <chekot...@gmail.com> wrote:
>> > > > > You said that you weren't creating a new Cidade, so that means
>> that
>> > > > > the Parceiro
>> > > > > was using an existing Cidade, correct?
>> >
>> > > > > On Mon, May 9, 2011 at 7:44 AM, elcabong <elcabong....@gmail.com>
>> wrote:
>> > > > > > Thisvalidationconfig:
>> >
>> > > > > > <?xml version="1.0" encoding="UTF-8"?>
>> > > > > > <constraint-mapping xmlns="
>> http://symfony.com/schema/dic/constraint-
>> > > > > > mapping"
>> > > > > >        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>> > > > > >        xsi:schemaLocation="
>> > > > > >http://symfony.com/schema/dic/constraint-mapping
>> > > > > >
>> http://symfony.com/schema/dic/services/constraint-mapping-1.0.xsd";>
>> >
>> > > > > >        <class name="MCP\AdminBundle\Entity\Cidade">
>> > > > > >                <property name="nome">
>> > > > > >                        <constraint name="NotBlank">
>> > > > > >                                <option name="message">Por favor
>> digite
>> > > > um
>> > > > > > nome</option>
>> > > > > >                        </constraint>
>> > > > > >                        <constraint name="MinLength">
>> > > > > >                                <option name="limit">6</option>
>> > > > > >                                <option name="message">Nome muito
>> > > > > > pequeno</option>
>> > > > > >                        </constraint>
>> > > > > >                        <constraint name="MaxLength">
>> > > > > >                                <option name="limit">90</option>
>> > > > > >                                <option name="message">Nome muito
>> > > > > > longo</option>
>> > > > > >                        </constraint>
>> > > > > >                        <constraint
>> > > > name="MCP\AdminBundle\Validator\Unique">
>> > > > > >                                <option
>> name="property">nome</option>
>> > > > > >                                <option
>> > > > > > name="entity">MCP\AdminBundle\Entity\Cidade</option>
>> > > > > >                                <option name="message">Cidade já
>> > > > > > cadastrada</option>
>> > > > > >                        </constraint>
>> > > > > >                </property>
>> > > > > >        </class>
>> >
>> > > > > >        <class name="MCP\AdminBundle\Entity\Usuario">
>> > > > > >                <property name="senha">
>> > > > > >                        <constraint name="MinLength">
>> > > > > >                                <option name="limit">6</option>
>> > > > > >                                <option name="message">A senha
>> precisa
>> > > > ser
>> > > > > > no mínimo 6 dígitos</
>> > > > > > option>
>> > > > > >                        </constraint>
>> > > > > >                        <constraint name="True">
>> > > > > >                                <option name="message">Erro
>> > > > senha</option>
>> > > > > >                        </constraint>
>> > > > > >                </property>
>> > > > > >        </class>
>> >
>> > > > > >        <class name="MCP\AdminBundle\Entity\Parceiro">
>> >
>> > > > > >        </class>
>> >
>> > > > > > </constraint-mapping>
>> >
>> > > > > > On May 9, 9:32 am, Donald Tyler <chekot...@gmail.com> wrote:
>> > > > > > > I don't see any info on your class annotations for what
>> properties
>> > > > are
>> > > > > > > required to be unique.
>> >
>> > > > > > > On Mon, May 9, 2011 at 7:27 AM, elcabong <
>> elcabong....@gmail.com>
>> > > > wrote:
>> > > > > > > > Entities:
>> >
>> > > > > > > > class Cidade
>> > > > > > > > {
>> > > > > > > >    /**
>> > > > > > > >     * @var string $nome
>> > > > > > > >     */
>> > > > > > > >    private $nome;
>> >
>> > > > > > > >    /**
>> > > > > > > >     * @var boolean $ativo
>> > > > > > > >     */
>> > > > > > > >    private $ativo;
>> >
>> > > > > > > >    /**
>> > > > > > > >     * @var bigint $id
>> > > > > > > >     */
>> > > > > > > >    private $id;
>> >
>> > > > > > > >    /**
>> > > > > > > >     * Set nome
>> > > > > > > >     *
>> > > > > > > >     * @param string $nome
>> > > > > > > >     */
>> > > > > > > >    public function setNome($nome)
>> > > > > > > >    {
>> > > > > > > >        $this->nome = $nome;
>> > > > > > > >    }
>> >
>> > > > > > > >    /**
>> > > > > > > >     * Get nome
>> > > > > > > >     *
>> > > > > > > >     * @return string $nome
>> > > > > > > >     */
>> > > > > > > >    public function getNome()
>> > > > > > > >    {
>> > > > > > > >        return $this->nome;
>> > > > > > > >    }
>> >
>> > > > > > > >    /**
>> > > > > > > >     * Set ativo
>> > > > > > > >     *
>> > > > > > > >     * @param boolean $ativo
>> > > > > > > >     */
>> > > > > > > >    public function setAtivo($ativo)
>> > > > > > > >    {
>> > > > > > > >        $this->ativo = $ativo;
>> > > > > > > >    }
>> >
>> > > > > > > >    /**
>> > > > > > > >     * Get ativo
>> > > > > > > >     *
>> > > > > > > >     * @return boolean $ativo
>> > > > > > > >     */
>> > > > > > > >    public function getAtivo()
>> > > > > > > >    {
>> > > > > > > >        return $this->ativo;
>> > > > > > > >    }
>> >
>> > > > > > > >    /**
>> > > > > > > >     * Get id
>> > > > > > > >     *
>> > > > > > > >     * @return bigint $id
>> > > > > > > >     */
>> > > > > > > >    public function getId()
>> > > > > > > >    {
>> > > > > > > >        return $this->id;
>> > > > > > > >    }
>> >
>> > > > > > > > }
>> >
>> > > > > > > > class Parceiro extends Usuario
>> > > > > > > > {
>> >
>> > > > > > > >    /**
>> > > > > > > >     * @var string $tipoPessoa
>> > > > > > > >     */
>> > > > > > > >    private $tipoPessoa;
>> >
>> > > > > > > >    /**
>> > > > > > > >     * @var string $nomeEmpresa
>> > > > > > > >     */
>> > > > > > > >    private $nomeEmpresa;
>> >
>> > > > > > > >    /**
>> > > > > > > >     * @var string $numeroDocumento
>> > > > > > > >     */
>> > > > > > > >    private $numeroDocumento;
>> >
>> > > > > > > >    /**
>> > > > > > > >     * @var string $inscrestadual
>> > > > > > > >     */
>> > > > > > > >    private $inscrestadual;
>> >
>> > > > > > > >    /**
>> > > > > > > >     * @var boolean $isentoInscr
>> > > > > > > >     */
>> > > > > > > >    private $isentoInscr;
>> >
>> > > > > > > >    /**
>> > > > > > > >     * @var string $nome
>> > > > > > > >     */
>> > > > > > > >    private $nome;
>> >
>> > > > > > > >    /**
>> > > > > > > >     * @var string $sobrenome
>> > > > > > > >     */
>> > > > > > > >    private $sobrenome;
>> >
>> > > > > > > >    /**
>> > > > > > > >     * @var string $urlsite
>> > > > > > > >     */
>> > > > > > > >    private $urlsite;
>> >
>> > > > > > > >    /**
>> > > > > > > >     * @var string $endereco
>> > > > > > > >     */
>> > > > > > > >    private $endereco;
>> >
>> > > > > > > >    /**
>> > > > > > > >     * @var string $complemento
>> > > > > > > >     */
>> > > > > > > >    private $complemento;
>> >
>> > > > > > > >    /**
>> > > > > > > >     * @var integer $numero
>> > > > > > > >     */
>> > > > > > > >    private $numero;
>> >
>> > > > > > > >    /**
>> > > > > > > >     * @var string $cep
>> > > > > > > >     */
>> > > > > > > >    private $cep;
>> >
>> > > > > > > >    /**
>> > > > > > > >     * @var string $telefone
>> > > > > > > >     */
>> > > > > > > >    private $telefone;
>> >
>> > > > > > > >    /**
>> > > > > > > >     * @var MCP\AdminBundle\Entity\Cidade
>> > > > > > > >     */
>> > > > > > > >    private $cidade;
>> >
>> > > > > > > >    /**
>> > > > > > > >     * Set tipoPessoa
>> > > > > > > >     *
>> > > > > > > >     * @param string $tipoPessoa
>> > > > > > > >     */
>> > > > > > > >    public function setTipoPessoa($tipoPessoa)
>> > > > > > > >    {
>> > > > > > > >        $this->tipoPessoa = $tipoPessoa;
>> > > > > > > >    }
>> >
>> > > > > > > >    /**
>> >
>> > ...
>> >
>> > mais »
>>
>> --
>> If you want to report a vulnerability issue on symfony, please send it to
>> security at symfony-project.com
>>
>> You received this message because you are subscribed to the Google
>> Groups "symfony users" group.
>> To post to this group, send email to symfony-users@googlegroups.com
>> To unsubscribe from this group, send email to
>> symfony-users+unsubscr...@googlegroups.com
>> For more options, visit this group at
>> http://groups.google.com/group/symfony-users?hl=en
>>
>
>  --
> If you want to report a vulnerability issue on symfony, please send it to
> security at symfony-project.com
>
> You received this message because you are subscribed to the Google
> Groups "symfony users" group.
> To post to this group, send email to symfony-users@googlegroups.com
> To unsubscribe from this group, send email to
> symfony-users+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/symfony-users?hl=en
>

-- 
If you want to report a vulnerability issue on symfony, please send it to 
security at symfony-project.com

You received this message because you are subscribed to the Google
Groups "symfony users" group.
To post to this group, send email to symfony-users@googlegroups.com
To unsubscribe from this group, send email to
symfony-users+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/symfony-users?hl=en

Reply via email to