8
respostas

php vendor/bin/doctrine list

Galera, boa tarde!

Acompanhando o curso ao executar o comando 'php vendor/bin/doctrine list' ele me apareceu o seguinte erro:

PHP Warning:  require_once(/var/www/doctrine.com.brvendor/autoload.php): failed to open stream: No such file or directory in /var/www/doctrine.com.br/cli-config.php on line 6
PHP Stack trace:
PHP   1. {main}() /var/www/doctrine.com.br/vendor/doctrine/orm/bin/doctrine:0
PHP   2. include() /var/www/doctrine.com.br/vendor/doctrine/orm/bin/doctrine:4
PHP   3. require() /var/www/doctrine.com.br/vendor/doctrine/orm/bin/doctrine.php:58
PHP Fatal error:  require_once(): Failed opening required '/var/www/doctrine.com.brvendor/autoload.php' (include_path='.:/usr/share/php') in /var/www/doctrine.com.br/cli-config.php on line 6
PHP Stack trace:
PHP   1. {main}() /var/www/doctrine.com.br/vendor/doctrine/orm/bin/doctrine:0
PHP   2. include() /var/www/doctrine.com.br/vendor/doctrine/orm/bin/doctrine:4
PHP   3. require() /var/www/doctrine.com.br/vendor/doctrine/orm/bin/doctrine.php:58

dando uma garimpada, "acreditei" que o erro estivesse acontecendo no "require_once DIR . 'vendor/autoload.php';". Tirei o DIR e ele aparece a lista, mas quando lanço 'php vendor/bin/doctrine orm:info', ele me retorna isso: vou colocar como comentário

8 respostas

Ele me aparece o seguinte erro:

PHP Notice:  Array to string conversion in /var/www/doctrine.com.br/vendor/doctrine/persistence/lib/Doctrine/Persistence/Mapping/Driver/AnnotationDriver.php on line 98
PHP Stack trace:
PHP   1. {main}() /var/www/doctrine.com.br/vendor/doctrine/orm/bin/doctrine:0
PHP   2. include() /var/www/doctrine.com.br/vendor/doctrine/orm/bin/doctrine:4
PHP   3. require() /var/www/doctrine.com.br/vendor/doctrine/orm/bin/doctrine.php:58
PHP   4. Aula\Doctrine\Helper\EntityManagerFactory->getEntityManager() /var/www/doctrine.com.br/cli-config.php:9
PHP   5. Doctrine\ORM\Tools\Setup::createAnnotationMetadataConfiguration() /var/www/doctrine.com.br/src/Helper/EntityManagerFactory.php:17
PHP   6. Doctrine\ORM\Configuration->newDefaultAnnotationDriver() /var/www/doctrine.com.br/vendor/doctrine/orm/lib/Doctrine/ORM/Tools/Setup.php:72
PHP   7. Doctrine\ORM\Mapping\Driver\AnnotationDriver->__construct() /var/www/doctrine.com.br/vendor/doctrine/orm/lib/Doctrine/ORM/Configuration.php:174
PHP   8. Doctrine\ORM\Mapping\Driver\AnnotationDriver->addPaths() /var/www/doctrine.com.br/vendor/doctrine/persistence/lib/Doctrine/Persistence/Mapping/Driver/AnnotationDriver.php:86
PHP   9. array_unique() /var/www/doctrine.com.br/vendor/doctrine/persistence/lib/Doctrine/Persistence/Mapping/Driver/AnnotationDriver.php:98
PHP Warning:  is_dir() expects parameter 1 to be a valid path, array given in /var/www/doctrine.com.br/vendor/doctrine/persistence/lib/Doctrine/Persistence/Mapping/Driver/AnnotationDriver.php on line 204
PHP Stack trace:
PHP   1. {main}() /var/www/doctrine.com.br/vendor/doctrine/orm/bin/doctrine:0
PHP   2. include() /var/www/doctrine.com.br/vendor/doctrine/orm/bin/doctrine:4
PHP   3. Doctrine\ORM\Tools\Console\ConsoleRunner::run() /var/www/doctrine.com.br/vendor/doctrine/orm/bin/doctrine.php:69
PHP   4. Symfony\Component\Console\Application->run() /var/www/doctrine.com.br/vendor/doctrine/orm/lib/Doctrine/ORM/Tools/Console/ConsoleRunner.php:63
PHP   5. Symfony\Component\Console\Application->doRun() /var/www/doctrine.com.br/vendor/symfony/console/Application.php:140
PHP   6. Symfony\Component\Console\Application->doRunCommand() /var/www/doctrine.com.br/vendor/symfony/console/Application.php:264
PHP   7. Doctrine\ORM\Tools\Console\Command\InfoCommand->run() /var/www/doctrine.com.br/vendor/symfony/console/Application.php:916
PHP   8. Doctrine\ORM\Tools\Console\Command\InfoCommand->execute() /var/www/doctrine.com.br/vendor/symfony/console/Command/Command.php:258
PHP   9. Doctrine\ORM\Mapping\Driver\AnnotationDriver->getAllClassNames() /var/www/doctrine.com.br/vendor/doctrine/orm/lib/Doctrine/ORM/Tools/Console/Command/InfoCommand.php:64
PHP  10. is_dir() /var/www/doctrine.com.br/vendor/doctrine/persistence/lib/Doctrine/Persistence/Mapping/Driver/AnnotationDriver.php:204
PHP Notice:  Array to string conversion in /var/www/doctrine.com.br/vendor/doctrine/persistence/lib/Doctrine/Persistence/Mapping/MappingException.php on line 46
PHP Stack trace:
PHP   1. {main}() /var/www/doctrine.com.br/vendor/doctrine/orm/bin/doctrine:0
PHP   2. include() /var/www/doctrine.com.br/vendor/doctrine/orm/bin/doctrine:4
PHP   3. Doctrine\ORM\Tools\Console\ConsoleRunner::run() /var/www/doctrine.com.br/vendor/doctrine/orm/bin/doctrine.php:69
PHP   4. Symfony\Component\Console\Application->run() /var/www/doctrine.com.br/vendor/doctrine/orm/lib/Doctrine/ORM/Tools/Console/ConsoleRunner.php:63
PHP   5. Symfony\Component\Console\Application->doRun() /var/www/doctrine.com.br/vendor/symfony/console/Application.php:140
PHP   6. Symfony\Component\Console\Application->doRunCommand() /var/www/doctrine.com.br/vendor/symfony/console/Application.php:264
PHP   7. Doctrine\ORM\Tools\Console\Command\InfoCommand->run() /var/www/doctrine.com.br/vendor/symfony/console/Application.php:916
PHP   8. Doctrine\ORM\Tools\Console\Command\InfoCommand->execute() /var/www/doctrine.com.br/vendor/symfony/console/Command/Command.php:258
PHP   9. Doctrine\ORM\Mapping\Driver\AnnotationDriver->getAllClassNames() /var/www/doctrine.com.br/vendor/doctrine/orm/lib/Doctrine/ORM/Tools/Console/Command/InfoCommand.php:64
PHP  10. Doctrine\Persistence\Mapping\MappingException::fileMappingDriversRequireConfiguredDirectoryPath() /var/www/doctrine.com.br/vendor/doctrine/persistence/lib/Doctrine/Persistence/Mapping/Driver/AnnotationDriver.php:205

In MappingException.php line 49:

  File mapping drivers must have a valid directory path, however the given path [Array] seems to be incorrect!  


orm:info

Vou deixar meu composer e minhas classes para analise

<?php

namespace Aula\Doctrine\Helper;

use Doctrine\ORM\EntityManager;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\Tools\Setup;

class EntityManagerFactory
{
    public function getEntityManager(): EntityManagerInterface
    {
        $rootDir = __DIR__ . '/../..';

        // é um array pq ele pode buscar em mais de um lugar
        $config = Setup::createAnnotationMetadataConfiguration([
            [$rootDir . '/src'],
            true
        ]);
        $connection = [
            'driver' => 'pdo_sqlite',
            'path'   => $rootDir . 'var/data/banco.sqlite'
        ];
        return EntityManager::create($connection, $config);
    }
}
<?php

use Aula\Doctrine\Helper\EntityManagerFactory;
use Doctrine\ORM\Tools\Console\ConsoleRunner;

require_once 'vendor/autoload.php';

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

return ConsoleRunner::createHelperSet($entityManager);

meu composer.json

{
    "name": "vinicyusmarques/doctrine.com.br",
    "description": "Curso Doctrine",
    "type": "project",
    "authors": [
        {
            "name": "Vinicyus Marques",
            "email": "vinicyusmarquess@gmail.com"
        }
    ],
    "require": {
        "doctrine/orm": "^2.7",
        "doctrine/migrations": "2.2.1"
    },
    "autoload": {
        "psr-4": {
            "Aula\\Doctrine\\": "src/"
        }
    }
}

e meu teste.php

<?php

use Aula\Doctrine\Helper\EntityManagerFactory;
use Doctrine\ORM\Tools\Console\ConsoleRunner;

require_once 'vendor/autoload.php';

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

return ConsoleRunner::createHelperSet($entityManager);

Vinicyus, os erros não fizeram muito sentido pra mim. Pode subir seu projeto todo no GitHub pra eu rodar aqui e ver se recebo algum erro?

Vinicyus? Conseguiu resolver seu problema?

Opa, desculpa a demora. Acabei de subi o projeto no git, segue o link https://github.com/vinicyusmarques/doctrine

Vinicyus, por que você adicionou essa linha?

https://github.com/vinicyusmarques/doctrine/blob/master/cli-config.php#L7

Achei a confusão aqui. Você configurou seu EntityManager errado.

https://github.com/vinicyusmarques/doctrine/blob/master/src/Helper/EntityManagerFactory.php#L16

O método createAnnotationMetadataConfiguration espera que o primeiro parâmetro seja um array de caminhos onde buscar as entidades, que o segundo parâmetro seja um booleano informando se o debug está ativado, etc.

Você passou ambos como um parâmetro só, dentro de um array.

Além disso, no mapeamento do caminho do banco de dados você se esqueceu de colocar uma /: https://github.com/vinicyusmarques/doctrine/blob/master/src/Helper/EntityManagerFactory.php#L22

O arquivo correto fica assim:

<?php

namespace Aula\Doctrine\Helper;

use Doctrine\ORM\EntityManager;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\Tools\Setup;

class EntityManagerFactory
{
    public function getEntityManager(): EntityManagerInterface
    {
        $rootDir = __DIR__ . '/../..';

        // é um array pq ele pode buscar em mais de um lugar
        $config = Setup::createAnnotationMetadataConfiguration(
            [$rootDir . '/src'],
            true
        );
        $connection = [
            'driver' => 'pdo_sqlite',
            'path' => $rootDir . '/var/data/banco.sqlite'
        ];
        return EntityManager::create($connection, $config);
    }
}    

Corrige esses problemas aí e me diz se vai. :-)