尝试通过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。我完全迷失在这里。
答案 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
在项目的根目录中。