Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Muitas Dúvidas - Doctrine -EntityManagerFactory

Vamos as dúvidas:

  1. Vou usar o sqlsrv que é o banco de dados no meu trabalho. portanto, sempre nos cursos altero o banco usado no treinamento para SQL SERVER. Como faço isso? terei de colocar algo diferente do que o Vinícius fez?
  2. Após fazer tudo como o instrutor (com exceção do Banco), tentei fazer o teste.php para verificar a conexão, mas deu fatal erro: Uncaught Error: class 'EntityManagerFactory not found in c: ... teste.php. Como resolver isso?
  3. Como eu vou me conectar com um banco se não passei nem senha?
  4. o banco de dados não existe, como isso acontece? é criado do nada? acho que faltou alguma informação na aula inicial ou eu não consegui entender. Podem me explicar?
  5. Estou usando o Sublime, nele não aparece nenhuma opção de comando como na videoaula. como consigo ver quais comandos podem ser executados no caso do EntityManager?
  6. Estou fazendo como um robô. porque não consigo entender a documentação do doctrine. Seria interessante termos uma aula que detalhasse melhor essa parte. Já fiz o curso do composer, mas fiquei na mesma. Certos detalhes não são explicados e não temos nenhuma consulta online para tirar a dúvida na hora que estamos fazendo a aula, ou algum monitor que possa nos ajudar?
  7. vou colocar o código PHP abaixo para análise.
<?php


namespace 'Alura\Doctrine\Helper';

class EntityManagerFactory
{
    public function getEntityManager():EntityManagerInterface
    {
        $rootDir = __DIR__ . '/../..';
        $config = Setup::createAnnotationMetadataConfiguration([$rootDir . '/src' ], isDevMode: true);
        $connection = ['driver' => 'sqlsrv', 'path' => $rootDir . '/var/data/banco.mdf'];
        return EntityManager::create($connection, $config);
    }
}

arquivo teste.php

<?php 

use Alura\Doctrine\Helper\EntityManagerFactory;

require_once __DIR__ . '/vendor/autoload.php';

$entityManagerFactory = new EntityManagerFactory();
$entityManager = $entityManagerFactory->getEntityManager();

var_dump($entityManager->getConnection());

composer.json

{
    "require": {
        "doctrine/orm": "^2.6"
    },
    "autoload": {
        "psr-4":{
            "Alura\\Doctrine\\": "/src"
        }
    }
}

quando rodei o composer require doctrine/orm e o composer dumpautoload deu tudo certo no terminal.

5 respostas

Oi Edson,

No curso, o Vinícius está usando o PHPStorm, por isso, essa lista de métodos que podem ser executados só aparece quando usa esse editor, no sublime por padrão não tem como fazer.

Pra seguir certinho o vídeo, é recomendado fazer com o mesmo banco que o Vinícius está utilizando, e depois que estiver tudo rodando com o código dele, aí sim explorar trocar de banco, para não acontecer de ficar "travado" no curso

Dei uma olhada no erro que você estava tendo e parece um erro de autoload, você pode enviar todo o código do seu projeto para que eu verifique?

E se você tiver qualquer dúvida sobre o funcionamento do doctrine, o recomendado é postar aqui no fórum mesmo, que tanto eu, quanto outros instrutores e alunos vão poder te ajudar :)

Olá Giovanni, Qual arquivo preciso colocar o codigo aqui? Já coloquei os arquivos abaixo: EntityManagerFactory.php Teste.php composer.json Os demais estão como vieram quando fiz o download do doctrine. Realmente fiquei com a sensação de que o meu autoload não estava rodando. Abri ele e ele chama outro arquivo autoload real. Acho que o problema está relacionado com o com fato de primeira vez em um curso não ter usado apenas diretórios como caminhos para carregar o autoload. O Vinícius utilizou no namespace "Alura\Doctrine" e trocou isso por src no composer.json. Tentei eliminar essa troca colocando o src no lugar do Alura\Doctrine mas também não consegui resolver esse problema.

Faz um arquivo ZIP e sobe ele em um Google Drive, ou cria um repositório e coloca no GitHub com todos os arquivos do seu projeto.

Assim eu posso ver certinho se o composer tá fazendo o autoload certinho, e tendo todos os arquivos eu tento fazer ele rodar aqui e vejo o que pode estar dando errado.

Olá Giovanni, Antes de mais nada Quero agradecer pela sua disposição em me ajudar. Estava parado nesse problema há bastante tempo. para ajudar envio abaixo o código de erro que aparece no terminal. Recomecei o curso do zero em um novo diretório criado na raiz do meu PC e o erro foi o mesmo. Se isso não ajudar, vou postar o arquivo com todo o programa.


C:\doc>php teste.php
PHP Fatal error:  Uncaught Error: Class 'Alura\Doctrine\Helper\EntityManagerFactory' not found in C:\doc\teste.php:7
Stack trace:
#0 {main}
  thrown in C:\doc\teste.php on line 7

Fatal error: Uncaught Error: Class 'Alura\Doctrine\Helper\EntityManagerFactory' not found in C:\doc\teste.php:7
Stack trace:
#0 {main}
  thrown in C:\doc\teste.php on line 7

C:\doc>
solução!

Boa tarde Giovanni. Consegui resolver o problema. O composer.json estava errado e eu só percebi agora. A barra do src é depois do diretório. Corrigi isso e rodei o dumpautoload novamente e o programa rodou. Mais uma vez agradeço a ajuda.