modified Autoloader for folders exclusion
This commit is contained in:
34
Load.php
34
Load.php
@ -11,10 +11,27 @@
|
|||||||
|
|
||||||
class Load
|
class Load
|
||||||
{
|
{
|
||||||
|
|
||||||
static protected $file;
|
static protected $file;
|
||||||
|
|
||||||
static protected $autoload;
|
static protected $autoload;
|
||||||
|
|
||||||
|
static protected $exclude = array('/.git', '/lib/core/tests', '/lib/core/.git');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add exclude path for autoload. Should be called before setAutoloadFrom
|
||||||
|
* @static
|
||||||
|
* @param array $exclude list of relative path (from project root)
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
static public function setExclude($exclude = array())
|
||||||
|
{
|
||||||
|
if(!is_array($exclude)) {
|
||||||
|
$exclude = array($exclude);
|
||||||
|
}
|
||||||
|
self::$exclude = array_merge(self::$exclude, $exclude);
|
||||||
|
}
|
||||||
|
|
||||||
static public function setAutoloadFrom($file)
|
static public function setAutoloadFrom($file)
|
||||||
{
|
{
|
||||||
self::$file = $file;
|
self::$file = $file;
|
||||||
@ -23,7 +40,7 @@ class Load
|
|||||||
}
|
}
|
||||||
self::$autoload = require(self::$file);
|
self::$autoload = require(self::$file);
|
||||||
}
|
}
|
||||||
|
|
||||||
static public function autoload($class)
|
static public function autoload($class)
|
||||||
{
|
{
|
||||||
if (isset(self::$autoload[$class])) {
|
if (isset(self::$autoload[$class])) {
|
||||||
@ -35,16 +52,16 @@ class Load
|
|||||||
self::buildAutoload();
|
self::buildAutoload();
|
||||||
}
|
}
|
||||||
if (isset(self::$autoload[$class])) {
|
if (isset(self::$autoload[$class])) {
|
||||||
require(PATH . self::$autoload[$class]);
|
require(PATH . self::$autoload[$class]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static public function getFilePath($class)
|
static public function getFilePath($class)
|
||||||
{
|
{
|
||||||
return self::$autoload[$class];
|
return self::$autoload[$class];
|
||||||
}
|
}
|
||||||
|
|
||||||
static protected function buildAutoload()
|
static protected function buildAutoload()
|
||||||
{
|
{
|
||||||
ignore_user_abort(true);
|
ignore_user_abort(true);
|
||||||
@ -52,12 +69,11 @@ class Load
|
|||||||
if (!file_exists($dir) && !mkdir($dir)) {
|
if (!file_exists($dir) && !mkdir($dir)) {
|
||||||
trigger_error('Can\'t create directory: "' . $dir . '"', E_USER_ERROR);
|
trigger_error('Can\'t create directory: "' . $dir . '"', E_USER_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
$scan = array(PATH . '/' . APP . '/src', PATH . '/lib');
|
$scan = array(PATH . '/' . APP . '/src', PATH . '/lib');
|
||||||
|
|
||||||
require_once(PATH . '/lib/core/util/AutoloadBuilder.php');
|
require_once(PATH . '/lib/core/util/AutoloadBuilder.php');
|
||||||
|
|
||||||
$builder = new AutoloadBuilder(self::$file, $scan);
|
$builder = new AutoloadBuilder(self::$file, $scan, self::$exclude);
|
||||||
$builder->build();
|
$builder->build();
|
||||||
ignore_user_abort(false);
|
ignore_user_abort(false);
|
||||||
}
|
}
|
||||||
|
@ -20,14 +20,17 @@ class AutoloadBuilder
|
|||||||
|
|
||||||
protected $dirs;
|
protected $dirs;
|
||||||
|
|
||||||
|
protected $exclude;
|
||||||
|
|
||||||
protected $handler;
|
protected $handler;
|
||||||
|
|
||||||
protected $regex = '/(class|interface) ([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)/';
|
protected $regex = '/(class|interface) ([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)/';
|
||||||
|
|
||||||
public function __construct($autoload, $dirs = array())
|
public function __construct($autoload, $dirs = array(), $exclude = array())
|
||||||
{
|
{
|
||||||
$this->autoload = $autoload;
|
$this->autoload = $autoload;
|
||||||
$this->dirs = $dirs;
|
$this->dirs = $dirs;
|
||||||
|
$this->exclude = $exclude;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function build()
|
public function build()
|
||||||
@ -42,6 +45,10 @@ class AutoloadBuilder
|
|||||||
);
|
);
|
||||||
|
|
||||||
foreach ($iterator as $file) {
|
foreach ($iterator as $file) {
|
||||||
|
|
||||||
|
if($this->isExcluded($file->getRealPath())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
// skip non php files
|
// skip non php files
|
||||||
$e = explode('.', $file->getFileName());
|
$e = explode('.', $file->getFileName());
|
||||||
if ((end($e) !== 'php') || $this->rightSubstr($file->getFileName(), 8) == 'Test.php') {
|
if ((end($e) !== 'php') || $this->rightSubstr($file->getFileName(), 8) == 'Test.php') {
|
||||||
@ -68,6 +75,17 @@ class AutoloadBuilder
|
|||||||
$this->closeAutoload();
|
$this->closeAutoload();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function isExcluded($file)
|
||||||
|
{
|
||||||
|
foreach ($this->exclude as $dir) {
|
||||||
|
if (stripos($file, PATH . $dir) === 0) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
protected function openAutoload()
|
protected function openAutoload()
|
||||||
{
|
{
|
||||||
$this->write("<?php\n// This file is autogenerated by \n// " . __FILE__ . " script.\nreturn array(\n");
|
$this->write("<?php\n// This file is autogenerated by \n// " . __FILE__ . " script.\nreturn array(\n");
|
||||||
|
Reference in New Issue
Block a user