我正在尝试在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
感谢任何人都能给予的帮助。
答案 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调用中删除第二个参数。