yaf icon indicating copy to clipboard operation
yaf copied to clipboard

请问有办法手动实例化控制器吗?

Open nowgoo opened this issue 8 years ago • 3 comments

我正在写一个访问控制的插件,设计思路是这样的:

每个控制器可以定义一个 accessRule 方法来返回规则,插件在 preDispatch 阶段根据该方法定义的规则来判断是否合法。所以需要手动实例化目标控制器,并调用其 accessRule 方法。

现在的问题是查遍文档也没找到实例化的方法,如果没有的话只能把 accessRule 设计成静态方法了。静态方法有很多不便,比如想针对当前用户的状态(是否登录,有什么角色……)设置规则的话,就很麻烦。

nowgoo avatar Apr 03 '16 08:04 nowgoo

生成一个 $request(Yaf_Request_Http) 实例,然后获取Router路由表对象 $dispatcher->getRouter(); 然后调用$router->router($request); 这就可以手动实例化控制器了。

liyanlong avatar May 08 '16 14:05 liyanlong

我也遇到了这个问题 做覆盖率测试的时候会有这个需求 不过我现在是要做其他的 有一个思路通过runkit 在运行时修改 Yaf_Dispatcher 把私有构造函数给他搞成public然后 按照 @liyanlong 说的做就可以了

agxmaster avatar Nov 19 '18 12:11 agxmaster

YAF控制器 禁止实例化的 设置成静态可以解决 虽然我这是model 但是问题应该跟你一样 我这解决了

public static $table = 'hp_app';

https://github.com/letwang/HookPHP/blob/master/app/admin/models/Abstract.php https://github.com/letwang/HookPHP/blob/master/app/admin/models/App.php

letwang avatar Dec 06 '18 02:12 letwang