erro fatal do symfony2 Não é possível redecar a class

Ok, estive aqui há duas horas e vejo que outras pessoas tiveram esse erro, mas não consigo combinar as suas causas / resoluções com as minhas.

Erro fatal: requer () [function.require]: Não é possível redeclarar o controlador da class em /var/www/biztv_symfony/vendor/symfony/src/Symfony/Component/ClassLoader/DebugUniversalClassLoader.php on line 55

O terminal dá uma mensagem de erro melhor apontando-me para a cláusula final da class real com a qual relatou ter problemas com (tentando redeclarar).

Se eu remover ou renomear o arquivo companyController.php, ele lança um erro do Symfony2 dizendo que ele foi procurar a class, mas não encontrou onde era esperado.

Se eu colocar o arquivo de volta em seu lugar, o apache lança um erro php dizendo que a empresa companycontroler não pode ser redeclarada.

Eu só tenho uma vez ?!

Aqui está a class inteira … se alguém tiver paciência para tentar me ajudar …

getDoctrine()->getEntityManager(); $entities = $em->getRepository('BizTVBackendBundle:company')->findAll(); return $this->render('BizTVBackendBundle:company:index.html.twig', array( 'entities' => $entities )); } /** * Finds and displays a company entity. * */ public function showAction($id) { $em = $this->getDoctrine()->getEntityManager(); $entity = $em->getRepository('BizTVBackendBundle:company')->find($id); if (!$entity) { throw $this->createNotFoundException('Unable to find company entity.'); } $deleteForm = $this->createDeleteForm($id); return $this->render('BizTVBackendBundle:company:show.html.twig', array( 'entity' => $entity, 'delete_form' => $deleteForm->createView(), )); } /** * Displays a form to create a new company entity. * */ public function newAction() { $entity = new company(); $form = $this->createForm(new companyType(), $entity); return $this->render('BizTVBackendBundle:company:new.html.twig', array( 'entity' => $entity, 'form' => $form->createView() )); } /** * Creates a new company entity. * */ public function createAction() { $entity = new company(); $request = $this->getRequest(); $form = $this->createForm(new companyType(), $entity); $form->bindRequest($request); if ($form->isValid()) { $em = $this->getDoctrine()->getEntityManager(); $em->persist($entity); $em->flush(); /* Create adminuser for this company to go along with it */ $userManager = $this->container->get('fos_user.user_manager'); $user = $userManager->createUser(); //make password (same as username) $encoder = $this->container->get('security.encoder_factory')->getEncoder($user); //get encoder for hashing pwd later $tempPassword = $entity->getCompanyName(); //set password to equal company name //Get company $tempCompanyId = $entity->getId(); //get the id of the just-inserted company (so that we can retrieve that company object below for relating it to the user object later) $tempCompany = $em->getRepository('BizTVBackendBundle:company')->find($tempCompanyId); //get the company object that this admin-user will belong to $user->setUsername($entity->getCompanyName() . "/admin"); //set username to $company/admin $user->setEmail('admin.'.$entity->getCompanyName().'@example.com'); //set email to non-functioning (@example) $user->setPassword($encoder->encodePassword($tempPassword, $user->getSalt())); //set password with hash $user->setCompany($tempCompany); //set company for this user $user->setConfirmationToken(null); //we don't need email confirmation of account $user->setEnabled(true); //without a confirmation token, we of course also need to flag the account as enabled manually $user->addRole('ROLE_ADMIN'); $userManager->updateUser($user); return $this->redirect($this->generateUrl('company_show', array('id' => $entity->getId()))); } return $this->render('BizTVBackendBundle:company:new.html.twig', array( 'entity' => $entity, 'form' => $form->createView() )); } /** * Displays a form to edit an existing company entity. * */ public function editAction($id) { $em = $this->getDoctrine()->getEntityManager(); $entity = $em->getRepository('BizTVBackendBundle:company')->find($id); if (!$entity) { throw $this->createNotFoundException('Unable to find company entity.'); } $editForm = $this->createForm(new companyType(), $entity); $deleteForm = $this->createDeleteForm($id); return $this->render('BizTVBackendBundle:company:edit.html.twig', array( 'entity' => $entity, 'edit_form' => $editForm->createView(), 'delete_form' => $deleteForm->createView(), )); } /** * Edits an existing company entity. * */ public function updateAction($id) { $em = $this->getDoctrine()->getEntityManager(); $entity = $em->getRepository('BizTVBackendBundle:company')->find($id); if (!$entity) { throw $this->createNotFoundException('Unable to find company entity.'); } $editForm = $this->createForm(new companyType(), $entity); $deleteForm = $this->createDeleteForm($id); $request = $this->getRequest(); $editForm->bindRequest($request); if ($editForm->isValid()) { $em->persist($entity); $em->flush(); return $this->redirect($this->generateUrl('company_edit', array('id' => $id))); } return $this->render('BizTVBackendBundle:company:edit.html.twig', array( 'entity' => $entity, 'edit_form' => $editForm->createView(), 'delete_form' => $deleteForm->createView(), )); } /** * Deletes a company entity. * */ public function deleteAction($id) { $form = $this->createDeleteForm($id); $request = $this->getRequest(); $form->bindRequest($request); if ($form->isValid()) { $em = $this->getDoctrine()->getEntityManager(); $entity = $em->getRepository('BizTVBackendBundle:company')->find($id); if (!$entity) { throw $this->createNotFoundException('Unable to find company entity.'); } $em->remove($entity); $em->flush(); } return $this->redirect($this->generateUrl('company')); } private function createDeleteForm($id) { return $this->createFormBuilder(array('id' => $id)) ->add('id', 'hidden') ->getForm() ; } } 

Então, o que foi um erro de linguagem por moi.

Mas para qualquer outra pessoa que se depara com esta mensagem de erro no Symfony2:

Erro fatal: require () [function.require]: Não é possível redeclar a class …

Aqui está uma dica: verifique se você apagou ou digitou acidentalmente: ed o espaço para nome no arquivo que contém a definição da class que a php afirma que está tentando redefinir.

A mensagem de erro php realmente não lhe dá uma pista para procurar isso … =)

Redeclare class – Provavelmente há classs de reboque com o mesmo nome

Às vezes, se você foi seduzido por copiar / colar, verifique seus nomes de class, namespaces e outros “erros de digitação” que poderiam ter acontecido. (Copiar / colar é o diabo da programação: /)

Semelhante a outras respostas, no meu caso, renomeei a class, mas não o arquivo que contém. Toda class deve ser declarada em um arquivo com o mesmo nome. Então, verifique isso também.

No meu caso, era uma declaração de use no namespace que usava o mesmo nome de class (mas outro caminho).

 namespace Bsz\RecordTab; use \Bsz\Config\Libraries; // I used this in constructor class Libraries { ... } 

Sem a diretiva de uso, ele funcionou