Slim Framework 4中的文档CLI

问题描述 投票:0回答:1

我正在使用Slim Framework 4创建我的第一个项目。我尝试配置Doctrine CLI以从数据库生成实体。

我已经配置了两个文件cli-config.php和boostrap.php,并在settings.php中配置了数据库配置。

bootstrap.php看起来像:

  <?php

use Doctrine\Common\Annotations\AnnotationReader;
use Doctrine\Common\Cache\FilesystemCache;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\Mapping\Driver\AnnotationDriver;
use Doctrine\ORM\Tools\Setup;
use Psr\Container\ContainerInterface;

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

return function (App $app) {

    $container = $app->getContainer();

    $container[EntityManager::class] = function (ContainerInterface $container): EntityManager {
        $config = Setup::createAnnotationMetadataConfiguration(
            $container['settings']['doctrine']['metadata_dirs'],
            $container['settings']['doctrine']['dev_mode']
        );

        $config->setMetadataDriverImpl(
            new AnnotationDriver(
                new AnnotationReader,
                $container['settings']['doctrine']['metadata_dirs']
            )
        );

        $config->setMetadataCacheImpl(
            new FilesystemCache(
                $container['settings']['doctrine']['cache_dir']
            )
        );

        return EntityManager::create(
            $container['settings']['doctrine']['connection'],
            $config
        );
    };

};

cli-config.php看起来像:

<?php

use Doctrine\ORM\EntityManager;
use Doctrine\ORM\Tools\Console\ConsoleRunner;
use Doctrine\DBAL\Tools\Console\Helper\ConnectionHelper;
use Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper;
use Symfony\Component\Console\Helper\HelperSet;
use Slim\App;

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

return function (App $app) {

/** @var Container $container */
//$container = require_once __DIR__ . '/bootstrap.php';
$container = $app->getContainer();

$em = $container[EntityManager::class];

$helperSet = new HelperSet(array(
    'db' => new ConnectionHelper($em->getConnection()),
    'em' => new EntityManagerHelper($em)
));

ConsoleRunner::run(

    ConsoleRunner::createHelperSet($helperSet)
);

};

当我在应用程序的根目录中运行命令php vendor/bin/doctrine时,出现以下错误:

PHP Fatal error:  Uncaught TypeError: Argument 1 passed to Doctrine\ORM\Tools\Console\ConsoleRunner::run() 
must be an instance of Symfony\Component\Console\Helper\HelperSet, instance of Closure given, 
called in vendor/doctrine/orm/bin/doctrine.php on line 69 and defined in vendor/doctrine/orm/lib/Doctrine/ORM/Tools/Console/ConsoleRunner.php:59
Stack trace:
#0 vendor/doctrine/orm/bin/doctrine.php(69): Doctrine\ORM\Tools\Console\ConsoleRunner::run(Object(Closure), Array)
#1 vendor/doctrine/orm/bin/doctrine(4): include('/media/Data/Pro...')
#2 {main}
  thrown in vendor/doctrine/orm/lib/Doctrine/ORM/Tools/Console/ConsoleRunner.php on line 59

有人可以帮我解决这个问题吗?

php doctrine-orm slim
1个回答
0
投票

为我工作]
<?php

use Doctrine\ORM\Tools\Console\ConsoleRunner;
use Doctrine\ORM\Tools\Setup;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\Tools\Console\Command\SchemaTool;
use Doctrine\ORM\Tools\Console\Command\SchemaTool\CreateCommand;
use DI\ContainerBuilder;

require 'vendor/autoload.php';

// Instantiate PHP-DI ContainerBuilder
$containerBuilder = new ContainerBuilder();

//$settings = include '/../src/settings.php';
$settings = require __DIR__ . '/../../app/settings.php';
$settings($containerBuilder);

// Build PHP-DI Container instance
$container = $containerBuilder->build();




// $settings = include 'src/settings.php';
// $settings = $settings['settings']['doctrine'];

$doctrineSetting = $container->get('settings')['doctrine'];

$config = Setup::createAnnotationMetadataConfiguration(
    $doctrineSetting['meta']['entity_path'],
    $doctrineSetting['meta']['auto_generate_proxies'],
    $doctrineSetting['meta']['proxy_dir'],
    $doctrineSetting['meta']['cache'],
    false
);

$em = EntityManager::create($doctrineSetting['connection'], $config);
$helperSet = ConsoleRunner::createHelperSet($em);
return ConsoleRunner::run($helperSet, []);

© www.soinside.com 2019 - 2024. All rights reserved.