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

时间:2014-07-06 14:58:22

标签: php collections phalcon

我正在尝试在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

感谢任何人都能给予的帮助。

2 个答案:

答案 0 :(得分:1)

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

public Phalcon\Mvc\Micro\CollectionInterface setHandler (mixed $handler, [boolean $lazy])

    |Sets the main handler

尝试将Controller的名称作为字符串处理。 由于您需要延迟加载(第二个参数),因此无需在注册时创建控制器的实例。

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

答案 1 :(得分:1)

根据documentation,您可以将对象传递给setHandler,或者将true的字符串名称传递给延迟加载的第二个参数。您似乎已将两者合并,因此它尝试将您的对象解析为要加载的名称。

将类的名称作为字符串传递,或从setHandler调用中删除第二个参数。