前面介绍过,系统内置的行为是系统正常执行的基础,所以开发人员不需要改动这些扩展。事实上系统已经提供了一系列行为扩展,在项目中使用时,直接配置即可。配置项LIMIT_REFLESH_TIMES表示刷新的间隔,以秒为单位。......
2023-11-04
通过前面的介绍,相信读者已经能够掌握内置行为扩展的使用。ThinkPHP的一大特点就是扩展灵活,同样行为也是可以自定义扩展的。利用自定义行为扩展,能够使编程更加灵活,因为扩展是一种拦截机制,一旦开启整个项目都受其约束,这个过程开发人员不需要在项目控制器或类库中编写任何代码,只需要在配置文件中简单地配置即可。接下来将深入介绍自定义行为扩展的实现。
1.创建自定义行为
自定义行为类的定义与普通类库及控制器有较大不同,自定义行为类库虽然也是PHP功能类,但自定义行为只有一个入口函数run,使用options成员属性映射项目配置项,如以下代码所示。
上述代码是一个名为AutoCheckUserLogin的自定义行为类。其中options成员属性是可选项,但却是重要的配置项,options成员属性值将被系统映射为项目配置文件中的配置项。例如上面的AutoCheckUserLogin数组项,在运行时系统会将该元素映射为配置文件中的AutoCheckUserLogin配置项,在项目中或者行为方法里直接使用C函数即可获得配置项值。
run方法是行为类中最关键的方法,也是普通类与行为类最明显的区别,run方法是行为类的入口,相当于普通类的构造函数,所以在创建行为类时只需要该方法设为Public即可。最后还需要确保自定义行为类继承于Behavior基类。
自定义行为类创建完成后,只需要将该文件保存到项目Lib/Behavior目录中,并以“行为名+Behavior+.class.php”的方式命名文件即可。这样一个名为AutoCheckUserLogin的自定义行为就可以直接使用了。
2.使用自定义行为
创建完自定义行为后怎么使用,这是初学者容易困惑的问题。事实上自定义行为不需要写任何调用代码,只需要配置即可。继续以AutoCheckUserLogin行为为例,要使用该行为只需要两步。首先在tags.php文件中指定行为的运行阶段(参照图11-8),如以下代码所示。
因为在设计行为时指定了只有配置参数AutoCheckUserLogin为true时才执行用户检查,所以还需要在配置文件中开启AutoCheckUserLogin,如以下代码所示。(www.chuimin.cn)
事实上,AutoCheckUserLogin配置项并不是必需的,也就是说在配置时,自定义行为就已经能够正常运行了,配置项只不过用于实现灵活的配置。通过前面的步骤,现在访问项目任意一个页面,都会执行用户登录检测。
行为的调用(即触发)并非只有配置tags.php文件一种方式,但无论从灵活性还是方便后期维护考虑,使用tags.php文件配置都具备优势,所以这里不再对其他调用方式进行介绍,感兴趣的读者可以参阅官方提供的开发手册。
通过上述操作,可以看到自定义行为的使用与内置行为的使用并无区别。同时行为机制的引入,对项目整体控制提供了高效、灵活的处理方式。
3.配置自定义行为标签
前面介绍过,标签就是行为的别名,一个标签可以对应多个行为。但这些标签都是系统内置的,用于表示程序(所有基于ThinkPHP构造的应用)不同的运行阶段,事实上开发人员也可以自定义标签,用于表示当前项目或控制器的不同运行阶段。假设需要在当前控制器载入时执行前面创建的AutoCheckUserLogin行为,代码如下所示。
上述代码表示在Index控制器初始化时添加一个“index_init”行为标签。添加标签后,AutoCheckUserLogin行为触发标签不再是“app_init”而是“index_init”,如以下代码所示。
此时,再次访问项目,只有Index控制器下的页面受AutoCheckUserLogin自定义行为影响,其他页面则不受影响。
提示:如果需要让该标签约束当前项目,可以将标签定义在公共控制器中,项目下的控制器继续用该公共控制器即可。同样的原理,自定义标签也可以定义在控制器前操作或后操作方法中,实现单个动作页面的行为控制。
有关PHP MVC开发实战的文章
前面介绍过,系统内置的行为是系统正常执行的基础,所以开发人员不需要改动这些扩展。事实上系统已经提供了一系列行为扩展,在项目中使用时,直接配置即可。配置项LIMIT_REFLESH_TIMES表示刷新的间隔,以秒为单位。......
2023-11-04
系统共支持7种模式扩展,下面将分别对最常用的几种模式进行介绍。表11-1 CURD操作接口如表11-1所示,参数$data表示传入或返回的数据信息;参数$options表示返回当前操作的模型名称及表前缀。......
2023-11-04
在这一过程中,开发人员需要对URL请求进行处理,例如安全检测、URL映射等,只能在运算进行前使用特定的文件进行拦截或处理。ThinkPHP的行为机制本质上是一种URL拦截处理机制,行为的引入把过去没有生命周期概念的PHP应用添加了生命周期的概念。图11-8 ThinkPHP行为执行过程内置行为是确保系统能够运行的基础,一般情况下开发人员不需要扩展内置的行为。如图11-8所示,项目首先执行的行为标签是app_init,一直到app_end标签,中间的标签有些有对应的行为,有些没有。......
2023-11-04
PHP 5后的版本借鉴了大量Java思想,得益于早期PHP面向过程编程支持,PHP在实现MVC设计中变得较灵活、易用。但是随着PHP 5.x的到来,各种MVC框架的出现,尤其Zend推出的Zend Framework,彻底地改变了PHP状况,使得PHP也能够实现优雅的Web编程。MVC设计模式将使代码将变得简洁。但是在MVC设计模式中,Index称为动作。当然,MVC只是一种设计模式,在开源的PHP编程世界中,已经拥有众多的MVC编程框架。......
2023-11-04
下面将分别对常用的扩展函数进行讲解。最终将会得到“一个多字节安全的substr()操作基础上的字...”,读者可以在此基础上继续完善msubstr函数。build_count_rand函数返回的结果是关联数组,在实际应用开发中,可以将结果循环插入数据库等。byte_format函数通常用于上传文件检测,或者统计用户使用空间大小等。......
2023-11-04
在网站开发中处理时间日期数据是比较烦琐的工作,例如计划日期时差、日期转星期、指定日期倒计时等。系统内置了Date扩展类,能够让日期数据处理变得快捷、简单。上述代码运行结果为“1.4246575342466”,即1.4年。其中参数time表示与构造函数日期比较的日期数据;参数precision表示结果精度。......
2023-11-04
前面已经简单介绍过ThinkPHP视图引擎,这些标签处理机制类似于JSP tag,使用XML作为标签的渲染方式,开发人员可以方便地在网页中嵌入XML标签,然后由ThinkPHP视图引擎解释成标准的PHP代码。ThinkPHP的视图引擎之所以高效,主要体现在它的标签扩展性。ThinkPHP的视图标签扩展性够完美地与后台控制器代码相结合,例如在Smarty中使用函数功能,首先需要在后台PHP代码注册,而在ThinkPHP中完全不需要,如以下代码所示。......
2023-11-04
对于普通的开发者而言,最需要关注Lib目录及Extend目录,接下来分别进行介绍。由于ThinkPHP遵循Apache 2.0协议,意味着PHP开发人员可以通过修改ThinkPHP源代码,以便更适合自己的开发需求,这就要求开发人员必须要对Extend目录下的扩展类库要有深入的认识。......
2023-11-04
相关推荐