Ajuda com ChoiceType::class

31 views
Skip to first unread message

Everlon Passos

unread,
Sep 5, 2020, 2:42:18 PM9/5/20
to Symfony Pt
Boa tarde devs! Tudo bem?

Estou com um problema aqui com relação ao Symfony5.
Gerei a Entity e Crud pelo console e tudo roda certinho, mas ao linkar outra Entity de "categoria" num <select> do Form ele está me dando um erro que não estou conseguindo resolver, tentei de tudo.

O cenário é o seguinte: Tenho dois formulários que ao abrir para Novo ou Editar (make:crud) ele aparece normalmente o conteúdo que preciso no <select> com label e value. Esta salvando normalmente se colocar este campo como input/text, então o Controller está Ok, Entity está Ok e Form está Ok. MAS ao salvar ele retorna os valores corretos dos campos e inclusive do <select> mas na hora de entrar na function() para submeter o form ele da erro em:
$form->handleRequest($request); 
Expected argument of type "int", "object" given at property path "interest".

Não estou entendendo o porque, já refiz de várias formas e inclusive recomecei o projeto (que era pra ser rápido por causa do Symfony/Console está me fazendo perder mais tempo).

Vou colocar os códigos aqui pelo PASTEBIN para não ficar confuso na leitura:
/src/Controller/LeadsController.php --> https://pastebin.com/HbzFieA1
/src/Repository/InterestsRepository.php --> https://pastebin.com/WnM4MbTH
/src/Repository/CustomerServiceRepository.php --> https://pastebin.com/ij2RY7qa
/src/Form/LeadsType.php --> https://pastebin.com/Q13SSiBm

Alguém pude me ajudar informar onde estou errando ou esquecendo de fazer?
Agradeço muito!

Se quiser entrar em contato por Whatsapp é o 35 9.9191-6778.
Obrigado!

ciro vargas

unread,
Sep 5, 2020, 5:06:52 PM9/5/20
to Symfony Pt
As opções choice_value e choice_label busca na lista de objetos 'choice' os valores pra preencher o atributo do html choice e o valor da tag em label, porém o valor escolhido sempre vai ser o item na lista do 'choices'.

Resumindo, se você seleciona o interesse com id 5 ele vai retornar o objeto interest com id 5 e por isso o erro, imagino que na entidade o setInterest está tipado pra int e ele está recebendo o tipo objeto vindo do form

Dá uma estudada a mais no ORM e no symfony no geral, você poderia usar o EntityType no lugar do ChoiceType que metade desse processo ele já faz pra você, de retirar o id persistir no banco, etc

 
 

Atenciosamente, Ciro Vargas
--
You received this message because you are subscribed to the Google Groups "Symfony Brasil" group.
To unsubscribe from this group and stop receiving emails from it, send an email to symfony-pt+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/symfony-pt/CAP29K-FOknjqaA6FhbN%2BL%3DL3yyWcpn9EfdycSY-DKBcqZHK__A%40mail.gmail.com.

Everlon Passos

unread,
Sep 8, 2020, 8:35:41 AM9/8/20
to Symfony Pt
Bom dia Ciro!

Exatamente isso que esta acontecendo. Já usei EntityType e o erro está acontecendo da mesma forma, não é na montagem do <select> em si nem na hora de enviar para salvar na DB (as informações estão vindo corretamente e salvando corretamente se for INT com input text), mas na hora de entrar no Controller: $form->handleRequest($request); onde ele pega o $request e só depois verifica o $form->isSubmitted() ... nesta linha ele me parece que perde o conteúdo, não o conteúdo de salvar mas para montar novamente (pelo que entendi), mas sendo que ele não iria montar e sim executar: return $this->redirectToRoute('leads_index'); que é a lista, não o form mais...

Deu para entender? 


Julius Sanctus

unread,
Sep 8, 2020, 12:53:56 PM9/8/20
to symfo...@googlegroups.com
Everlon,

Manda a entity LEADS, só para tirar  uma dúvida aqui.

Att,



--

"Nada poderá nos separar do amor de Deus"
Romanos 8:39

Everlon Passos

unread,
Sep 8, 2020, 5:27:21 PM9/8/20
to Symfony Pt

Julius Sanctus

unread,
Sep 8, 2020, 5:41:12 PM9/8/20
to symfo...@googlegroups.com
Everlon, o que vi foi o seguinte:

na tua Entidade LEADS:
  1.   /**
  2.      * @ORM\Column(type="integer", nullable=false)
  3.      */
  4.     private $interest;
- o campo é integer

e no Repository, vc tá retornando um Objeto Entity:
  1.     public function findAllTitleAlphabetical()
  2.     {
  3.         return $this->createQueryBuilder('i')
  4.             ->orderBy('i.title', 'ASC')
  5.             ->getQuery()
  6.             ->execute()
  7.         ;
  8.     }
Deveria retornar um array
Por isso a mensagem de erro : Expected argument of type "int", "object" given at property path "interest".

Vc pode refazer  a função do Repository algo como:

public function findAllTitleAlphabetical(){
$entity = 
this->createQueryBuilder('i')->orderBy('i.title', 'ASC')->getQuery()->execute();
$retorno = [];
foreach( $entity as $key){
   $retorno[$key->getTitle()] = $key->getId();
}

return $retorno;
}


Espero ter ajudado.

Att,

ciro vargas

unread,
Sep 8, 2020, 5:55:02 PM9/8/20
to Symfony Pt
Exatamente como eu falei, o setInterest tá com int e tá vindo um objeto Interest do form

das duas uma, ou tu faz um manytoone na entidade ao invés de setar int, ou no setInterest você tira o int e bota Interest e seta o atributo com $interest->getId()

 
 

Atenciosamente, Ciro Vargas

Everlon Passos

unread,
Sep 9, 2020, 7:20:35 AM9/9/20
to Symfony Pt
Bom dia!

Muito obrigado Julius! Sua dica me fez acertar aqui no que precisava ser feito! Eu não tinha compreendido o modo que o Ciro tinha dito, mas obrigado também Ciro!

Permaneceu o ChoiceType::class mas removi o choice_labelchoice_value no LeadsController... já no Repository com o foreach() ele criou o array e o $form->handleRequest($request); aceitou belezinha!

Agora vamos tentar linkar estes mesmos lances na lista do twig em index! hehe! 

Muito obrigado mesmo!

Reply all
Reply to author
Forward
0 new messages