0

我正在尝试将 Doctrine 的 MongoDB ODM 与 FlightPHP 一起使用,我认为这将是一个非常快速的小项目。

我已经用 Flight 注册了 DocumentManager 类,如下所示:

$dm = DocumentManager::create( $connection, $config );

Flight::register('dm', 'Doctrine\ODM\MongoDB\DocumentManager', array($connection,     $config));

// Endpoints
Flight::route( '/api/create', function ( )
{
    $thing = new Thing();

    $dm = Flight::dm();
    $dm->persist( $thing );
    $dm->flush();
} );

似乎飞行试图调用受保护的 Doctrine 构造函数?我有什么选择来解决这个问题?

Fatal error: Call to protected Doctrine\ODM\MongoDB\DocumentManager::__construct() from context 'flight\core\Loader' in /../vendor/mikecao/flight/flight/core/Loader.php on line 116
4

2 回答 2

4

这已在最新版本的 Flight 中解决

现在应该可以在最新的提交 b9b2d0f 中使用。您可以注册一个可调用对象,而不仅仅是一个类名:

Flight::register('db', array('Doctrine\ORM\EntityManager','create'), array($connection, $config));

添加了为类实例化注册回调的功能。 https://github.com/mikecao/flight/commit/b9b2d0fa2d75e6b2f606fbd0d9a8059a0f741578 https://github.com/mikecao/flight/issues/105

于 2014-03-19T06:54:50.053 回答
1

DocumentManager 类旨在通过其create()静态工厂方法构造,如入门简介文档条目中所示。

看一下 Flight 的Registering Classes,它似乎只支持通过调用它们的构造函数来构造类。这与 Silex 等框架形成对比,后者允许您完全控制构建共享服务(请参阅此处)。按原样,我在 Flight 的当前代码中看不到解决方法,所以我建议打开一个问题或向项目提交拉取请求以请求/添加更灵活的服务构建。

于 2014-03-01T16:07:50.333 回答