我正在尝试在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调用中删除第二个参数