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