Doctrine ORM schema-tool:update错误:在布尔值上调用成员函数add()

时间:2018-03-15 10:26:50

标签: php doctrine

尝试通过CLI更新数据库时遇到此错误:

> vendor\bin\doctrine orm:schema-tool:update --force --dump-sql
Error: Call to a member function add() on boolean in C:\inetpub\wwwroot\jobrouter\_projects\event-app\bootstrap.php on line 10

Call Stack:
0.0013     352656   1. {main}() C:\...\vendor\doctrine\orm\bin\doctrine:0
0.0028     353432   2. include('C:\...\vendor\doctrine\orm\bin\doctrine.php') C:\...\vendor\doctrine\orm\bin\doctrine:4
0.0078     362368   3. require('C:\...\cli-config.php') C:\...\vendor\doctrine\orm\bin\doctrine.php:48
0.0082     362752   4. require_once('C:\...\bootstrap.php') C:\...\cli-config.php:3

这是我的bootstrap.php:

<?php

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

$autoloader = require_once __DIR__."/vendor/autoload.php";
$autoloader->add('', __DIR__."/src/library/");


// Create a simple "default" Doctrine ORM configuration for Annotations
$isDevMode = true;
$config = Setup::createAnnotationMetadataConfiguration(array(__DIR__."/src"), 
$isDevMode, null, null, false);

// database configuration parameters
$conn = array(
    'driver' => 'pdo_mysql',
    'user' => '...',
    'password' => '...',
    'host' => '...',
    'dbname' => '...',
    'charset' => 'utf8',
);

// obtaining the entity manager
$entityManager = EntityManager::create($conn, $config);

这是我的composer.json:

{
  "require": {
    "doctrine/orm": "2.4.*",
    "symfony/yaml": "2.*",
    "silex/silex": "~2.0",
    "j7mbo/twitter-api-php": "^1.0"
  },
  "autoload": {
    "psr-0": {"": "src/"}
  },
  "config": {
    "optimize-autoloader": true
  }
}

我在浏览器中使用该应用程序没有任何问题,自动加载按预期工作。我只是在尝试使用Doctrine CLI时遇到此错误,并且当它始终返回一个对象时,我不明白$autoloader如何可能是一个布尔值。

是否有人遇到类似错误,您是如何解决的?

编辑:我刚刚通过调试器运行了我的应用程序,require_once __DIR__."/vendor/autoload.php";返回$autoloader的正确对象,而不是bool。我完全迷失在这里。

1 个答案:

答案 0 :(得分:1)

由于您已经配置了PSR-0自动加载

{
    "autoload": {
        "psr-0": {
            "": "library/src/"
        }
    }
}

不需要

$autoloader = require_once __DIR__ . '/vendor/autoload.php';

$autoloader->add(
    '', 
    __DIR__ . '/src/library/'
);

调整boostrap.php仅需要自动加载器:

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

然后确保vendor/autoload.php存在,最好是通过运行

$ composer install

$ composer dump-autoload

在项目的根目录中。