THINKPHP如何能让一个类中的所有方法在执行前都先执行一个验证方法

高分请讲解下,THINKPHP如何能让一个类中的所有方法在执行前都先执行一个验证方法
最新回答
大众电灯泡!

2024-05-05 08:35:29

首先在你的方法类中写一个public function _initialize这个方法 在这个方法里面调用你的验证方法 这样在这个类里面所有方法执行前都会先执行一遍这个方法 如果在别的类里面的方法执行前也要执行这个验证方法 那就别的类继承这个类 然后就可以了
一枕庭前雪

2024-05-05 03:00:52

这不就是问的构造函数么
thinkphp的是

class IndexController extends Controller{
function __initialize(){
echo "总是会被运行";

}
}

可以百度下thinkphp的__initialize()和__construct()的区别
没事别惹我

2024-05-05 05:59:54

如果是简单的话,你可以先写一个类,在这个类中执行一些验证方法,然后让你所执行的类到继承于这个类就可以了。

其实,你说的在thinkphp中正好有一个更加符合你要求的例子
叫做RBAC,也就是权限控制管理
你可以在官网上下到之例子,在Example文件下有,即:RBAC

至于具体的使用方法,推荐你看一下这可视频,讲的很详细,一步一步来,就可以了!!
http://www.tudou.com/programs/view/YyfoP5pzdBo/
追问
rbac我知道 但用在这里太大材小用了, 我就想知道他的原理
追答
他的原理主要是,写一个基类CommonAction.class.php,然后让所用要验证的类都继承它,从而就在执行其他类的是后完成了自动验证。
追问
我就是想知道这里面具体的原理啊
为什么继承了他就会先自动执行一次_initialize方法...
追答
这就是面向对象的规则,特殊就特殊在函数名是_initialize()
它就相当于C++里面的类的初始函数base(),是在类创建时自动执行的,
继承之后,当然自动执行他了。
也就是说,_initialize()换成别的函数名就不行了
追问
c++里面类的初始函数?
类创建时自动执行?
面向对象有这些东西吗
我说清楚点吧 就是说我写个类 叫PublicAction,里面有个方法叫validate(), 如何让这个类的其他方法和子类的其他方法 在执行前都自动执行这个validate方法. 如何实现
追答
_initialize()换成别的函数名就不行了
追问
thinkphp框架规定这个名字 换了当然不行, 但如果我自己规定一个不就行了?
...算了吧 我去读读源代码
追答
都跟你说了,肯定不行呀!这是php的语法规则。你看源代码能看到,那就真是见了鬼了
追问
...php语法规则里面可没这个
这函数是人定义的
参考ThinkPHP.Lib.Think.Core.Action.class.php的39行至46行
public function __construct()
{
//实例化视图类
$this->view = Think::instance('View');
//控制器初始化
if(method_exists($this,'_initialize'))
$this->_initialize();
}
追答
好吧,不过我也没说错吧,构造函数
追问
还好吧 直接用initialize搞定了
我阅君心

2024-05-05 03:10:46

可以试试_initialize,或者单独写一个验证的控制,然后让需要验证的控制器继承那个单独写的验证控制器