7
respostas

Não é possível excluir campo

Estou com problemas ao excluir curso, quando vejo no terminal aparece este erro:

127.0.0.1:42850 [500]: /deletar?id=9 - Uncaught Error: Class 'Alura\Cursos\Controller\EntityManagerCreator' not found in /opt/lampp/htdocs/projeto-inicial/src/Controller/Exclusao.php:14
Stack trace:
#0 /opt/lampp/htdocs/projeto-inicial/public/index.php(17): Alura\Cursos\Controller\Exclusao->__construct()
#1 {main}
  thrown in /opt/lampp/htdocs/projeto-inicial/src/Controller/Exclusao.php on line 14

Como faço para resolver? Abaixo está o link do projeto https://github.com/GrasielaMach14/projeto-inicial.git

7 respostas

Oi Grasiela,

Você esqueceu de informar o namespace da classe EntityManagerCreator. Basta por "use Alura\Cursos\Infra\EntityManagerCreator;" e o arquivo saberá o namespace correto :)

Faça isso e nos diga se funcionou corretamente, abraço.

Continua dando erro

127.0.0.1:40434 [500]: /deletar?id=9 - Uncaught Doctrine\Persistence\Mapping\MappingException: Class 'Alura\Cursos\Controller\Curso' does not exist in /opt/lampp/htdocs/projeto-inicial/vendor/doctrine/persistence/lib/Doctrine/Persistence/Mapping/MappingException.php:94
Stack trace:
#0 /opt/lampp/htdocs/projeto-inicial/vendor/doctrine/persistence/lib/Doctrine/Persistence/Mapping/RuntimeReflectionService.php(36): Doctrine\Persistence\Mapping\MappingException::nonExistingClass('Alura\\Cursos\\Co...')

E outra dúvida, em qual classe faço a importação da classe EntityManagerCreator?

Oi Grasiela, o erro agora é outro. Basicamente você tem esquecido de usar os namespaces corretos em sua aplicação.

Observe que o erro agora informa que não existe a classe "Alura\Cursos\Controller\Curso", isso por que Curso é uma entidade e está em outro namespace.

Importe essa classe de Curso usando "use Alura\Cursos\Entity\Curso;"

Sobre a sua outra dúvida, sempre que você for usar uma classe com namespace diferente terá que informar o seu namespace para que o autoload interprete corretamente qual classe deve usar.

No caso do seu controller de Exclusão você esqueceu de informar tanto o namespace do EntityManager quanto do Curso, então acrescente nesse arquivos ambos namespaces:

"use Alura\Cursos\Infra\EntityManagerCreator;"

"use Alura\Cursos\Entity\Curso;"

Corrigi o erro mas ainda continua não excluindo os campos. Apresenta este erro aqui:

 127.0.0.1:41600 [500]: /deletar?id=9 - require(): Failed opening required '/tmp/__CG__AluraCursosEntityCurso.php' (include_path='.:/usr/share/php') in /opt/lampp/htdocs/projeto-inicial/vendor/doctrine/common/lib/Doctrine/Common/Proxy/AbstractProxyFactory.php on line 206

Esse erro do proxy era esperado, o mestre Vinicius apresenta esse erro na própria aula e fala como resolver.

No terminal, dentro da pasta do projeto, você deve executar:

"vendor\bin\doctrine orm:generate-proxies"

Após rodar esse comando suba o servidor novamente e veja se consegue excluir o curso.

Executei o comando e deu isso aqui:

PHP Warning:  PHP Startup: Unable to load dynamic library 'pdo_sqlite' (tried: /usr/lib/php/20170718/pdo_sqlite (/usr/lib/php/20170718/pdo_sqlite: cannot open shared object file: No such file or directory), /usr/lib/php/20170718/pdo_sqlite.so (/usr/lib/php/20170718/pdo_sqlite.so: undefined symbol: php_pdo_unregister_driver)) in Unknown on line 0
Could not open input file: vendorbindoctrine

Oi Grasiela, você já teve problemas com o driver antes? Você fez tudo certo como descrito na aula pelo professor, corrigiu os namespaces e rodou o comando do proxy.

Vamos esperar alguém que saiba resolver esse seu novo problema por que não tenho como simula-lo em minha máquina. Dei uma pesquisada no Google e vi até gente aqui no Alura com esse problema.