Phalcon中的微集合(类的对象不能转换为字符串)


Micro Collections in Phalcon (Object of class can't be converted to string)

我正在尝试在Phalcon中使用集合制作一个微型API,以便我可以将逻辑分离到控制器中。

use Phalcon'DI'FactoryDefault,
   Phalcon'Mvc'Micro,
   Phalcon'Mvc'Micro'Collection as MicroCollection;
// Use Loader() to autoload our model
$loader = new 'Phalcon'Loader();
$loader->registerNamespaces(array(
  'BookApp'Controllers' => __DIR__ . '/bookapp/controllers/',
  'BookApp'Models' => __DIR__. '/bookapp/models/',
  'BookApp' => __DIR__ . '/bookapp/'
));
$loader->register();
....
$app = new Micro();
$app->setDI($di);
$users = new MicroCollection();
$users->setHandler(new 'BookApp'Controllers'UserController(), true);
$users->setPrefix('/user');
$users->post('/', 'register');
$users->get('/{id}', 'getUser');
$users->delete('/{id}', 'deleteUser');
$users->put('/{id}', 'updateUser');
$users->post('/{code}/confirm', 'confirmEmail');
$users->post('/{id}/reset', 'resetPassword');
$app->mount($users);

这个问题在$app->mount()上。它告诉我它需要一个集合,而不是'Phalcon'Mvc'Micro' collection,而是'Phalcon'Mvc' collection。然而,后者没有必要的方法。如果我尝试上面的代码,我得到:

Catchable fatal error: Object of class BookApp'Controllers'UserController could not be converted to string

感谢大家的帮助。

Class Phalcon'Mvc'Micro'Collection的文档说明$handler的参数类型为mixed:

public Phalcon'Mvc'Micro'CollectionInterface setHandler (mixed $handler, [boolean $lazy])
    |Sets the main handler

尝试将控制器的名称作为字符串处理。因为你想要延迟加载(第二个参数),所以不需要在注册控制器的时候创建一个实例。

$users->setHandler(''BookApp'Controllers'UserController', true);

根据文档,您可以将对象传递给setHandler,或者将字符串名称与true一起传递给延迟加载的第二个参数。您似乎将两者结合在一起,因此它试图将您的对象解析为要加载的名称。

要么将类名作为字符串传递,要么从setHandler调用中删除第二个参数