Инструмент консоли Doctrine 2 говорит: вам не хватает "cli-config.php " или " config / cli-config.РНР"

Я запустил инструмент консоли доктрины:

$ php vendor/doctrine/orm/bin/doctrine orm:schema-tool:create --dump-sql

Я получил это вместо ожидаемой функциональности:

You are missing a "cli-config.php" or "config/cli-config.php" file in your
project, which is required to get the Doctrine Console working. You can use the
following sample as a template:

<?php
use DoctrineORMToolsConsoleConsoleRunner;

// replace with file to your own project bootstrap
require_once 'bootstrap.php';

// replace with mechanism to retrieve EntityManager in your app
$entityManager = GetEntityManager();

return ConsoleRunner::createHelperSet($entityManager);

вопросы:

  • Я на ZF2, и нет файла под названием bootstrap.php
  • Я новичок в ZF2, поэтому я не знаю, что такое мой entityManager и что я должен поставить для GetEntityManager

как мне это сделать?

2 ответов


Легкий Путь

Используйте Модуль Доктрины:

vendor/bin/doctrine-module orm:schema-tool:create --dump-sql


Трудный Путь

есть два файла, которые вам нужно написать самостоятельно:bootstrap.php и cli-config.php

почему я должен писать два файла, да?

Doctrine Docs инструктирует вас сделать это.

где это сказано?

здесь:

в cli-config найдите код

// replace with mechanism to retrieve EntityManager in your app
$entityManager = GetEntityManager();

здесь GetEntityManager() не является частью какой-либо библиотеки или кода, это ваш собственный метод, который доктрина предлагает вам написать самостоятельно, где этот метод возвращает экземпляр Doctrine\ORM\EntityManager. Я думаю, что доктрина может быть более ясной в этой части.

я все еще не могу сделать это, врачи слишком суровы, помогите!

если у вас слишком много слоев в вашей конфигурации, то есть попытка разработать доктрину с ZF2 симфонии, это может быть боль, выясняя, где заканчивается доктрина, где начинается фреймворк и т. д. Попробуйте настроить доктрину самостоятельно в отдельном контейнере тестирования, следуя документам доктрины, без использования каких-либо рамок, и все должно стать очень ясным.

вот что я сделал для моей конфигурации доктрины. Я выбрал создайте 3 файла для гибкости и поместите их все в my ./config папка моей структуры папок Zend.

во-первых, у меня есть cli-config.php

use Doctrine\ORM\Tools\Setup;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\Tools\Console\ConsoleRunner;
require 'config/bootstrap.php';

$config = Setup::createAnnotationMetadataConfiguration($paths, $isDevMode);
$entityManager = EntityManager::create($dbParams, $config);
return ConsoleRunner::createHelperSet($entityManager);

тогда, мой bootstrap.php

date_default_timezone_set("America/Detroit"); // Set the default timezone
ini_set('display_startup_errors', 1);
ini_set('display_errors', 1);
error_reporting(- 1);

include 'vendor/autoload.php';
include 'doctrine-config.php';

и, наконец, моя doctrine-config.php. Он отделен и простой способ вызвать только этот файл из других частей вашего кода. В моем случае это называется CLI и изнутри синглтона ZF2, когда мне нужно соединение доктрины.

// Paths to Entities that we want Doctrine to see
$paths = array(
    "module/Module/src/Entity",
    "module/MyApplication/src/Entity"
);

// Tells Doctrine what mode we want
$isDevMode = true;

// Doctrine connection configuration
$dbParams = array(
    'driver' => 'pdo_mysql',
    'user' => 'user',
    'password' => 'pass',
    'dbname' => 'db_name'
);