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类。
任何想法明智地设计模式?
答案 0 :(得分:0)
Laravel没有内置的乱七八糟的探测器。 另外,检查包标签是否与命名空间匹配是一种自定义约定,Laravel根本不使用包标签。 您好像在使用第三方库?
答案 1 :(得分:0)
我为我需要的每条规则制作了一个抽象类和接口。 每条规则都有自己的类。 规则扩展了摘要,并在摘要中使用了大部分逻辑。 规则本身存储在配置文件中,在配置文件中我还提到了类和类特定的操作。