/** * Create Pages object instance from path * * @param string $path * @param array|callable $filter * @param string $class * @return \cms\Pages */ public static function from($path, $filter = ['index', '404'], $class = Page::class) { $iterator = new \RecursiveDirectoryIterator(realpath($path), \RecursiveDirectoryIterator::SKIP_DOTS); if (class_exists($class)) { $iterator->setInfoClass($class); } $filter = is_callable($filter) ? $filter : function (Page $item) use($filter) { return $item->isValid((array) $filter); }; return new self(new \RecursiveCallbackFilterIterator($iterator, $filter)); }
public function __construct(array $sources) { foreach ($sources as $source) { if ($source instanceof \SplFileInfo) { $this->children[] = $source; } elseif (is_string($source) && ($source = realpath($source))) { if (is_file($source)) { $child = new SourceFileInfo($source); $child->setInfoClass(SourceFileInfo::class); $this->children[] = $child; } elseif (is_dir($source)) { $child = new \RecursiveDirectoryIterator($source); $child->setInfoClass(SourceFileInfo::class); $this->children[] = $child; } } } }
/** * create an iterator to iterate through the children * * @since 6-23-11 * @param string $regex * @param integer $depth * @return \Traversable */ public function createIterator($regex = '', $depth = -1) { $depth = (int) $depth; $iterator = null; if ($this->isDir()) { if ($depth < 0 || $depth > 1) { $iterator = new RecursiveDirectoryIterator($this->getPathname(), FilesystemIterator::CURRENT_AS_FILEINFO | FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::SKIP_DOTS); $iterator->setInfoClass(get_class($this)); $iterator = new RecursiveIteratorIterator($iterator, RecursiveIteratorIterator::SELF_FIRST); $iterator->setMaxDepth($depth); } else { $iterator = new FilesystemIterator($this->getPathname(), FilesystemIterator::CURRENT_AS_FILEINFO | FilesystemIterator::KEY_AS_PATHNAME | FilesystemIterator::SKIP_DOTS); $iterator->setInfoClass(get_class($this)); } //if/else } else { $iterator = $this->openFile(); $iterator->setFlags(\SplFileObject::DROP_NEW_LINE | \SplFileObject::SKIP_EMPTY); } //if/else if (!empty($regex)) { $iterator = new RegexIterator($iterator, $regex, RegexIterator::MATCH); } //if/else return $iterator; }
/** * Создаёт объект RecursiveDirectoryIterator для текущей директории. * * @return RecursiveDirectoryIterator */ public function createRecursiveDirectoryIterator($flags = null) { if (isset($flags)) { $iterator = new \RecursiveDirectoryIterator($this->getRealPath(), $flags); } else { $iterator = new \RecursiveDirectoryIterator($this->getRealPath()); } $iterator->setFileClass('Stalxed\\FileSystem\\FileObject'); $iterator->setInfoClass('Stalxed\\FileSystem\\FileInfo'); return $iterator; }