【问题标题】:Extending Laravel 5.1 Mess Detection the right way以正确的方式扩展 Laravel 5.1 消息检测
【发布时间】:2015-08-04 11:59:21
【问题描述】:

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 类时遇到了困难。

有什么设计模式明智的想法吗?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2016-04-30
        • 2017-07-08
        • 1970-01-01
        • 1970-01-01
        • 2015-11-10
        • 2015-11-18
        • 2011-07-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多