以正确的方式扩展Laravel 5.1 Mess Detection

时间:2015-08-04 11:59:21

标签: oop design-patterns laravel-5 laravel-5.1 php-5.6

Laravel 5.1只有一个内置硬编码的Mess Detection,它会搜索@package标签是否与/ namespace相同,如下所示:

preg_match('/namespace\ ' . self::REQUIRED_NAMESPACE . '\\\(.*);/isU', $content, $namespace);
        preg_match('/\/*( )+@package\ (.*)[\r?\n]/isU', $content, $package);

        if (!isset($namespace[1]) || empty($namespace[1])) {
            continue;
        }

我想扩展它以添加多个检测类。 我的文件夹结构目前如下所示:

Helpers >
    Commands >
        MessDetector >
            Detector >
                DetectorInterface.php
                DetectorAbstract.php
            PackageTagDetector.php
        MessDetector.php

MessDetector文件是Artisan Command,意味着它扩展了 \ Illuminate \ Console \ Command

我有一个名为 mess_detection.php 的配置文件,它具有如下检测规则:

return [
    'rules' => [
        '\Helpers\Commands\MessDetector\PackageTagDetector' =>
            [
                'rule' => '/\/*( )+@package\ (.*)[\r?\n]/isU',
                'path' => app_path(),
                'info' => 'Checking for @package tag',
                'error'=> 'Malformed or missing package tag'
            ]
        ]
    ];

但是我一直想知道如何在MessDetector类中实例化实例化PackageTagDetector类。

任何想法明智地设计模式?

2 个答案:

答案 0 :(得分:0)

Laravel没有内置的乱七八糟的探测器。 另外,检查包标签是否与命名空间匹配是一种自定义约定,Laravel根本不使用包标签。 您好像在使用第三方库?

答案 1 :(得分:0)

我为我需要的每条规则制作了一个抽象类和接口。 每条规则都有自己的类。 规则扩展了摘要,并在摘要中使用了大部分逻辑。 规则本身存储在配置文件中,在配置文件中我还提到了类和类特定的操作。