मैं प्रतिबद्ध करने में सक्षम होने से पहले अपने कोड मानक (पीएसआर 2) को सत्यापित करने के लिए एसवीएन प्रीकॉमिट हुक का उपयोग कर रहा हूं। यह सिर्फ एक अपवाद के साथ पूरी तरह से काम करता है। मेरी यूनिट टेस्ट (PHPUnit) फ़ाइलें सभी बूट यूनिट परीक्षण कार्यों के मौजूदा बूटस्ट्रैप क्लास के मौजूद हैं, लेकिन बूटस्ट्रैप क्लास परिभाषा के ऊपर त्रुटि संदेशों को भी सक्षम करती हैं।मौजूदा प्रीकॉमिट हुक चेतावनियों के साथ एसवीएन प्रतिबद्धता की अनुमति दें
पीएसआर 2 मानक इसे करने का प्रयास करते समय चेतावनी देगा, क्योंकि आपके पास ऐसा कोड नहीं हो सकता है जो कक्षा में नहीं है या उस फ़ाइल में फ़ंक्शन है जिसमें कक्षा परिभाषा है।
क्या किसी के पास मेरे कोडनिफर में इस त्रुटि को बाहर करने का तरीका है या मेरे कोड को वैध बनाने का तरीका है (कोड को बूटस्ट्रैप वर्ग के प्रत्येक स्थिर फ़ंक्शन में मेरे त्रुटि संदेशों को सक्षम करने के बिना)?
<?php
namespace AlbumTest;
use Zend\Loader\AutoloaderFactory;
use Zend\Mvc\Service\ServiceManagerConfig;
use Zend\ServiceManager\ServiceManager;
use Zend\Stdlib\ArrayUtils;
use RuntimeException;
error_reporting(E_ALL | E_STRICT);
chdir(__DIR__);
class Bootstrap
{
protected static $serviceManager;
protected static $config;
protected static $bootstrap;
public static function init()
{
// Load the user-defined test configuration file, if it exists; otherwise, load
if (is_readable(__DIR__ . '/TestConfig.php')) {
$testConfig = include __DIR__ . '/TestConfig.php';
} else {
$testConfig = include __DIR__ . '/TestConfig.php.dist';
}
$zf2ModulePaths = array();
if (isset($testConfig['module_listener_options']['module_paths'])) {
$modulePaths = $testConfig['module_listener_options']['module_paths'];
foreach ($modulePaths as $modulePath) {
if (($path = static::findParentPath($modulePath))) {
$zf2ModulePaths[] = $path;
}
}
}
$zf2ModulePaths = implode(PATH_SEPARATOR, $zf2ModulePaths) . PATH_SEPARATOR;
$zf2ModulePaths .= getenv('ZF2_MODULES_TEST_PATHS') ?: (defined('ZF2_MODULES_TEST_PATHS')
? ZF2_MODULES_TEST_PATHS : '');
static::initAutoloader();
// use ModuleManager to load this module and it's dependencies
$baseConfig = array(
'module_listener_options' => array(
'module_paths' => explode(PATH_SEPARATOR, $zf2ModulePaths),
),
);
$config = ArrayUtils::merge($baseConfig, $testConfig);
$serviceManager = new ServiceManager(new ServiceManagerConfig());
$serviceManager->setService('ApplicationConfig', $config);
$serviceManager->get('ModuleManager')->loadModules();
static::$serviceManager = $serviceManager;
static::$config = $config;
}
public static function getServiceManager()
{
return static::$serviceManager;
}
public static function getConfig()
{
return static::$config;
}
protected static function initAutoloader()
{
$vendorPath = static::findParentPath('vendor');
if (is_readable($vendorPath . '/autoload.php')) {
$loader = include $vendorPath . '/autoload.php';
} else {
$zf2Path = getenv('ZF2_PATH') ?: (defined('ZF2_PATH')
? ZF2_PATH : (is_dir($vendorPath . '/ZF2/library')
? $vendorPath . '/ZF2/library' : false));
if (!$zf2Path) {
throw new RuntimeException(
'Unable to load ZF2. Run `php composer.phar install` or define a ZF2_PATH environment variable.'
);
}
include $zf2Path . '/Zend/Loader/AutoloaderFactory.php';
}
AutoloaderFactory::factory(
array(
'Zend\Loader\StandardAutoloader' => array(
'autoregister_zf' => true,
'namespaces' => array(
__NAMESPACE__ => __DIR__ . '/' . __NAMESPACE__,
),
),
)
);
}
protected static function findParentPath($path)
{
$dir = __DIR__;
$previousDir = '.';
while (!is_dir($dir . '/' . $path)) {
$dir = dirname($dir);
if ($previousDir === $dir) {
return false;
}
$previousDir = $dir;
}
return $dir . '/' . $path;
}
}
Bootstrap::init();
की init में error_reporting सेट करना होगा मेरा प्री-प्रतिबद्ध हुक बस करते समय PSR-2 नियमों के लिए बस मेरे कोड की जांच करता है। लाइनों को हटाने अजीब होगा, लेकिन कृपया इस विचार पर विस्तृत करें ... मेरे init में त्रुटि रिपोर्टिंग रखना उस फ़ंक्शन के लिए काम करेगा, लेकिन मुझे इसे अन्य सभी कार्यों में भी कॉपी करना होगा। और यह वह समाधान नहीं है जिसे मैं ढूंढ रहा हूं। – Sander
आपका कोड स्निफ़फर डेटा कैसे प्राप्त करता है? क्या स्टडीन से पढ़ना संभव है, इसलिए अस्थायी फ़ाइलों को उत्पन्न किए बिना, पहली फाइलों को फ्लाई पर किया जा सकता है? –