我刚刚设置了一个 ZF2 项目并为 Doctrine2 配置了它,没有问题。它可以工作并且现在只是给我一个错误,因为它找不到我要查询的数据库表。
实体也设置正确,一切都按照http://www.jasongrimes.org/2012/01/using-doctrine-2-in-zend-framework-2/
所以想使用 CLI 创建表等,但是在运行任何 CLI 命令时我得到
[InvalidArgumentException]
The helper "em" is not defined.
我正在使用的命令
php doctrine.php orm:schema-tool:update --dump-sql
正在从文件夹运行教义.php
/Library/WebServer/Documents/zf2-Skel-NewProj1/vendor/bin
现在,如果我将 CLI 用于我的 ZF1.11 项目之一,它可以正常工作。
为了让这个工作我必须编辑位于下面的 cli-config.php 文件
/Library/WebServer/Documents/zf2-Skel-NewProj1/vendor/doctrine/orm/tools
这个文件的内容是:
<?php
require_once '../../lib/vendor/doctrine-common/lib/Doctrine/Common/ClassLoader.php';
$classLoader = new \Doctrine\Common\ClassLoader('Doctrine\ORM', realpath(__DIR__ . '/../../lib'));
$classLoader->register();
$classLoader = new \Doctrine\Common\ClassLoader('Doctrine\DBAL', realpath(__DIR__ . '/../../lib/vendor/doctrine-dbal/lib'));
$classLoader->register();
$classLoader = new \Doctrine\Common\ClassLoader('Doctrine\Common', realpath(__DIR__ . '/../../lib/vendor/doctrine-common/lib'));
$classLoader->register();
$classLoader = new \Doctrine\Common\ClassLoader('Symfony', realpath(__DIR__ . '/../../lib/vendor'));
$classLoader->register();
$classLoader = new \Doctrine\Common\ClassLoader('Entities', __DIR__);
$classLoader->register();
$classLoader = new \Doctrine\Common\ClassLoader('Proxies', __DIR__);
$classLoader->register();
$config = new \Doctrine\ORM\Configuration();
$config->setMetadataCacheImpl(new \Doctrine\Common\Cache\ArrayCache);
$driverImpl = $config->newDefaultAnnotationDriver(array(__DIR__."/Entities"));
$config->setMetadataDriverImpl($driverImpl);
$config->setProxyDir(__DIR__ . '/Proxies');
$config->setProxyNamespace('Proxies');
$connectionOptions = array(
'driver' => 'pdo_sqlite',
'path' => 'database.sqlite'
);
$em = \Doctrine\ORM\EntityManager::create($connectionOptions, $config);
$helpers = new Symfony\Component\Console\Helper\HelperSet(array(
'db' => new \Doctrine\DBAL\Tools\Console\Helper\ConnectionHelper($em->getConnection()),
'em' => new \Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper($em)
));