ThinkPHP支持哪些jquery工作流插件件

【005 项目总结、生活感悟】(2)
流程的定义:
按着条理和顺序做事情的过程就是流程。我们的定义:流程就是一组活动按照一定顺序组成的序列流。企业或者组织的运营本质上就是众多的业务流程运行的过程。
流程引擎的核心:
事件驱动和控制业务逻辑,不需要人记忆该做什么,只要流程的开关一经开启,剩下的事件触发都不需要人为处理,都是流程引擎去做的。
为什么要使用工作流呢?
1、为了应对快速变化的市场环境
2、梳理企业的业务过程,采用分而治之的管理方式,由粗变细的转变。
流程思想:仅有思想是不行的,还有将思想落地,融入到企业的日常工作流程中去。&
工作流模型:工作流控制模块、工作流定义模块、工作流监控管理模块和客户端应用模块
&3、项目中的实践:
两种流程类型:业务流和审批流
如何创建工作流以及如何使用和配置工作流?
例如:公司职工辞职这一流程
1、创建工作流:&
& & & 使用工作流,复用性强(流程、表单);更加面向对象:只需要关注业务颗粒的开发,不需要关注调用谁,或者被谁调用,从解耦和到更高层次的,有目的的耦合。
整个过程:信息技术发展的一个抽象,解决流程自动化的问题。
工作流的使用和配置:
工作流是将一组任务组织起来以完成某个经验过程:定义了任务的触发事件和触发条件
1、都是为了实现某一事件而创建的
2、各个流程节点之间是相互独立的,满足“高内聚,低耦合”的原则
3、工作流将一些对象联合到一起,可以认为是面向过程的开发,而每一个节点又是面向对象开发,有目的的关联起来。
4、流程引擎控制整个流程的进行。
优点:简单、方便的控制每个流程的实现
审批流的业务可以实现复用,业务流的业务更加灵活
工作流的扩展性:工作流实现了应用逻辑和业务逻辑的分离,因此可以在不修改功能模块程序的情况下进行业务流程的重构。工作流具有较强的水平和垂直扩展能力,可以大大减少系统的人力、物力和财力,缩短系统的开发周期,从而提高开发效率。&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:120506次
积分:7340
积分:7340
排名:第2339名
原创:124篇
评论:2464条
阅读:9590
阅读:9739
(3)(4)(4)(4)(4)(4)(4)(4)(4)(4)(3)(4)(3)(2)(3)(4)(2)(4)(3)(2)(4)(2)(3)(4)(3)(4)(2)(5)(3)(4)(2)(3)(3)(3)(1)(1)(6)(4)全部项目分类
共 24 个项目
上次更新: 日
上次更新: 日
上次更新: 日
上次更新: 日
上次更新: 日
上次更新: 日[3.2]行为扩展以及插件机制介绍! - ThinkPHP框架
看了一下,3.2出来还没多久,貌似没有关于3.2的行为扩展和插件机制的教程帖子,手册里也是渺渺几笔,等于没说,这篇文章向大家介绍一下3.2的行为扩展和插件机制。
首先行为扩展这个概念是TP架构的核心组成之一,关于行为的解释我就粗略的概括一下吧:
TP在从接受到HTTP请求到最终将视图输出,期间经历的很多步骤,这些步骤大家可以在/manual_3_2.html#system_process 这里面看到,这里就不再详细叙述了,那么行为扩展实际上就是在这些流程里埋下了一个钩子,你可以往钩子里添加你自己的业务逻辑,当程序执行到某个钩子位置时将自动触发你的业务逻辑,关于系统预置的一些钩子可以参考:
/manual_3_2.html#behavior_extend
本文的主要目的是教大家如何使用行为扩展和插件,这里为什么要提到&插件&这个词呢?因为在3.2里,有了一个插件的概念,和行为共用一个Hook类,所以放在一起说,原理上并无太大区别。
一、行为扩展篇
1.TP内置行为钩子
我们知道TP中预留了一些行为钩子,比如 action_begin,这个钩子是在动作开始执行时触发,预置的钩子大家通过配置文件注册行为类,大家在Application/Common/Conf目录下创建一个tags.php,这个和3.1是一样的,返回一个数组,数组格式是 &钩子名&=&array(&行为类1&,&行为类2&......)
这里我给一个例子:
Application/Common/Conf/tag.php:
return array(
&action_begin& =& array(&Behaviors\\test&)
可以看到,我往action_begin这个钩子里面注册了一个行为,这个行为就是Behaviors\\test 这里的写法是命名空间写法,其对应的类文件路径是:
Application/Behaviors/testBehavior.class.php
注意实际类文件名需要加上Behavior后缀,以及用.class.php作为文件扩展名。
Application/Behaviors/testBehavior.class.php:
namespace B
class testBehavior{
function run($arg){
echo &这是一个行为扩展&.$
千万要注意第一行的命名空间,对于命名空间不理解的请自行查阅php手册。另外对于TP的自动加载机制,参考手册:
/manual_3_2.html#autoload
行为的执行入口是 run()方法,触发钩子时会自动执行行为类里的run()方法。
2.动态添加钩子和注册行为
通过上面的例子大家才是了解了行为大概是个什么东西,但是对于其执行流程可能还不清楚,这里我来介绍下动态添加钩子和注册行为,使大家对行为执行机制有一个比较清晰的理解。
首先,行为钩子添加和注册行为类,以及触发行为,都是通过Hook类来实现的,Hook类在TP核心包里的ThinkPHP目录下,Hook.class.php.
&&添加钩子以及注册行为:\Think\Hook::add('钩子名','行为')
&&埋设/监听/触发钩子:\Think\Hook::listen('钩子名','传递给run的参数,必须是个变量');
假设我们需要在访问index.php/Public/login.html的时候触发login钩子里的行为,那么首先我们需要在login方法中监听钩子,也就是把钩子埋在login方法里,当访问login方法时就会自动触发,有点像猎人的陷阱不是吗?
function login(){
\Think\Hook::listen('login');//监听一个名为login的钩子
...其他代码略...
好了,我们在login方法里监听了login钩子,那么接下来我们往这个钩子里添加一些行为,这样访问login的时候会自动触发这些行为,执行行为类的run方法。
行为在哪里注册呢?
当然得在触发之前注册,1.你可以通过tags.php注册,上面提到过了,只不过把action_begin换成login。2.动态添加,假如你这个钩子只在Public控制器中使用,那么你可以在PublicController的_initialize()初始化方法中动态添加钩子。
function _initialize(){
\Think\Hook::add('login','Behaviors\\test');
这里就往login这个钩子里添加了一个test行为,比较懒直接从上面复制过来了,大家理解这个意思就可以。
添加多个行为的话可以这样
\Think\Hook::add('login',array('Behaviors\\test','Behaviors\\test1'...));
就是第二个参数变成一个数组,数组里每个元素对应一个行为类,注意,当钩子被触发时,这里面的所有行为都会依次执行。
3.带参数的行为
上面我们知道了行为是通过run()方法执行的,那么我们想传递一些参数进去怎么办呢?
\Think\Hook::listen(); 的第二个参数。
注意listen方法定义如下:
static public function listen($tag, &$params=NULL)
可以看到第二个参数是一个引用传递的参数,也就是说,第二个参数必须是一个变量,不能是值,下面的使用方法是错误的:
\Think\Hook::listen('login',&hello&);
这样才是正确的
$hello = &hello&;
\Think\Hook::listen('login',$hello);//√
关于引用传递的知识这里不作介绍,请自行翻阅PHP手册。
这样我们在行为类里面run方法可以指定一个参数来接收$hello
function run($arg){
echo $//输出 hello
当然你也可以
function run(&$arg){
echo $//输出hello
$arg = &bye&;
这样参数设定为引用类型,你可以在run里面改变原始变量的值。
看了上面的行为,我们可以总结出一个模式:
定义不同的行为,执行同一个方法run
而插件呢?
它是可以定义run的,并且相当于在一个行为类里面可以有多个入口,这些入口在不同的条件下触发。
假设我们在tags.php里面添加了这样一个钩子
'showflash' =& array('test'),
注意与行为的区别,注册行为需要包含命名空间也就是反斜杠 \\,当没有反斜杠,只有一个单词的时候将认为是一个插件。
插件定义在 Application/Addons/插件名/插件名Addon.class.php
比如上面的test插件就是 Application/Addons/test/testAddon.class.php
插件类的定义:
namespace Addons\
class testAddon{
function showflash(){
echo &这是插件执行入口&;
可以看到一个明显的区别,就是run入口变成了 showflash,和钩子名相同。
有人疑问这样有什么用吗?请继续往下看:
上面我们只定义了一个插件钩子 showflash,假如我们再来一个钩子:
'clearflash'=&array('test');
看到没?这个钩子里面同样注册了一个test插件,而这个test还是上面那个testAddon类,不同的是,你需要为这个clearflash定义一个入口方法,于是testAddon类变成了:
namespace Addons\
class testAddon{
function showflash(){
echo &这是插件执行入口&;
function clearflash(){
echo &这是另外一个插件钩子入口&;
这样当你不同的钩子注册了同一个插件类时,你需要在插件类里面为这些钩子分别定义入口方法。
而行为类则不是,行为类不管你是不是同一个钩子,它只认准run方法。
这就是行为和插件的区别。
文章到这里就结束了。
写了这么多,下班吃饭去也,有不明白的可以留言。
积分:6026
ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。}

我要回帖

更多关于 js工作流插件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信