Browse Source

modified Autoloader for folders exclusion

master
Anton Grebnev 13 years ago
parent
commit
8464c8edac
  1. 34
      Load.php
  2. 20
      util/AutoloadBuilder.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
util/AutoloadBuilder.php

@ -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");

Loading…
Cancel
Save