PHP中简单的伪责任链模式(一)

PHP中对进行链式验证(常见于登录的验证)

下面以表单提交进行演示

创建验证的抽象类`FormValidate

<?php
/**
* Created by PhpStorm.
* User: iamcyan
* Date: 2017/6/30
* Time: 13:19
*/

namespace App\Services\Validate;

use Illuminate\Http\Request;
/**
* Class TestValidtate
* @package App\Services\Validate
*/
abstract class FormValidtate
{
  //定义一个属性存储责任链实例
  protected $nextHandler;

  final public function setNext(FormValidtate $formValidtate)
  {
      $this->nextHandler = $formValidtate;
  }

  final public function handle(Request $request)
  {
      if (!$this->handleFormCondition($request)) {
          return false;
      }
      $this->nextHandler->handleFormCondition($request);
  }


  abstract public function handleFormCondition(Request $request);


}

创建两个类TestForm1、TestForm2继承自FormValidate

<?php
/**
 * Created by PhpStorm.
 * User: iamcyan
 * Date: 2017/6/30
 * Time: 13:45
 */

namespace App\Services\Validate\Form;

use App\Services\Validate\FormValidtate;
use Illuminate\Http\Request;
class TestForm1 extends FormValidtate
{


    public function handleFormCondition(Request $request)
    {
        if ($request->get('test1') == 'test1') {
            echo 'testForm1---success';
            return true;
        } else {
            echo 'testForm1---fail';
            return false;
        }

    }
}

<?php
/**
 * Created by PhpStorm.
 * User: iamcyan
 * Date: 2017/6/30
 * Time: 14:32
 */

namespace App\Services\Validate\Form;


use App\Services\Validate\FormValidtate;
use Illuminate\Http\Request;

class TestForm2 extends FormValidtate
{

    public function handleFormCondition(Request $request)
    {
        if ($request->get('test2') == 'test2') {
            echo 'testForm2---sucess'.PHP_EOL;
            return true;
        } else {
            echo 'testForm2---fail';
            return false;
        }

    }

}

在控制器中进行访问

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Services\Validate\Form\TestForm1;
use App\Services\Validate\Form\TestForm2;
class FormController extends Controller
{
    protected $testForm1;
    protected $testForm2;

    public function __construct(TestForm1 $testForm1, TestForm2 $testForm2)
    {
        $this->testForm1 = $testForm1;
        $this->testForm2 = $testForm2;
    }

    public function create()
    {
        $array = [[1,2,3], [4,5,6], [7,8,9]];
        $res = array_collapse($array);
        var_dump($res);
        $res = array_collapse($res);
        dd($res);


        return view('form.index');
    }

    public function store(Request $request)
    {
        $this->testForm1->setNext($this->testForm2);
        $this->testForm1->handle($request);

    }
}

上面的这种写法是以一种面向对象的思维对多个验证条件进行链式验证
即 条件1:true->条件2:true->条件3:true.....。没有其他的额外的分支。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,124评论 19 139
  • Php:脚本语言,网站建设,服务器端运行 PHP定义:一种服务器端的HTML脚本/编程语言,是一种简单的、面向对象...
    廖马儿阅读 6,718评论 2 38
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,702评论 4 61
  • 写一篇文章,就是在塑造一件工艺品,投入与否,决定着它的质量。 一篇文章的出现,在于头脑中的构思,也可以理解成是对一...
    记忆桃园阅读 2,860评论 0 0
  • 太冷。太饿。太孤独了。 焦急而绝望。 从天而降的萧军,给我带来了活下去的希望,还让我获得了梦幻般的爱情。我曾经为之...
    铅华眉深阅读 4,516评论 0 1

友情链接更多精彩内容