本文实例讲述了PHP实现基于状态的责任链审批模式。分享给大家供大家参考,具体如下:
我们开发网站,除了前后,还有后台,除了内容管理,很多时候要涉及到『审批』。
比如:商务部要做个专题推广活动,活动中需要调用一些商品做优惠。
1、商务部编辑先写文案
2、商务部领导审批文案内容
3、商品部领导需要审批商品的价格和库存(万一没货呢)
4、后面可能还有好多领导要审批(带扩展)
今天我们要引入的模式是『责任链模式』
在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来,形成一条链条。请求在这个链条上传递,知道链条上的某一个对象决定处理次请求。发出这个请求的客户端并不知道链条上哪一个对象最终处理这个请求。
为了演示方便,我们做价格设定。
1、假定层级关系是:商品部领导>商务部领导>编辑
2、假设只能一级级审批(也就是不能跳级,仅为了演示方便)
3、这里审批暂时不能回退

(上图:演示界面show.php)
show.php:
<?php
require('subject.php');
if ($_GET){
if (isset($_GET['createSubject'])){ //点击创建文案后执行
$subject = new subject();
$subject->content = '文案的内容';
$subject->save();
}
}
?>
<html>
<head>
<title>责任链-审批</title>
<style>
*{marign:0;padding:0}
.container{width:100%;margin: 0 auto;text-align: center}
</style>
</head>
<body>
<div class="container">
<div><h2>流程演示界面</h2></div>
<form method="get" action="show.php">
<div class="row">
<textarea name="" id="" cols="30" rows="10"></textarea>
<div>
<button name="createSubject">编辑创建文案</button>
</div>
</div>
<div class="row">
<hr>
<button name="step">领导审批</button>
</div>
</form>
</div>
</body>
</html>
编辑点击『创建文案』提交内容,然后把文案写到到本地json文件(保存)。文案的主题是subject.php:
<?php
class subject
{
public $content = ''; //文案内容
public $state = 0; //初试状态
/**
* 保存内容(编辑保存)
*/
public function save(){
//我们这里保存到本地文件
file_put_contents(__DIR__.'/subject.json',json_encode($this));
echo '文案已经创建成功';
}
}
这个时候文案已经创建好了,需要进入审批
