/** * findPaths * * @param string $layout * * @return \SplFileInfo */ public function findPaths($layout = null) { $layout = $layout ?: $this->getLayout(); if (is_file($this->getPath() . '/' . $layout)) { return new \SplFileInfo(realpath($this->getPath() . '/' . $layout)); } $layout = explode('/', $layout); $name = array_pop($layout); $layout = implode('/', $layout); if (is_dir($this->getPath() . '/' . $layout)) { $files = Filesystem::find($this->path . '/' . $layout, $name); /** @var \SplFileInfo $file */ foreach ($files as $file) { if (File::stripExtension($file->getFilename()) == $name) { return $file; } } } return null; }
/** * Find all files from paths. * * @param mixed $condition Finding condition, that can be a string, a regex or a callback function. * Callback example: * <code> * function($current, $key, $iterator) * { * return @preg_match('^Foo', $current->getFilename()) && ! $iterator->isDot(); * } * </code> * @param boolean $recursive True to resursive. * * @return \AppendIterator Finded files or paths iterator. * * @since 2.0 */ public function find($condition, $recursive = false) { return $this->appendIterator(function ($path) use($condition, $recursive) { return Filesystem::find((string) $path, $condition, $recursive); }); }
/** * Find all files which matches condition. * * @param mixed $condition Finding condition, that can be a string, a regex or a callback function. * Callback example: * <code> * function($current, $key, $iterator) * { * return @preg_match('^Foo', $current->getFilename()) && ! $iterator->isDot(); * } * </code> * @param boolean $recursive True to resursive. * * @return \CallbackFilterIterator Finded files or paths iterator. * * @since 2.0 */ public function find($condition, $recursive = false) { return Filesystem::find((string) $this, $condition, $recursive); }
/** * Method to test findByCallback(). * * @return void * * @covers Windwalker\Filesystem\Filesystem::findByCallback */ public function testFindByCallback() { $condition = function ($current, $key, $iterator) { return pathinfo($current->getBasename(), PATHINFO_EXTENSION) == 'html'; }; $files = Filesystem::find(static::$dest, $condition, true, true); $expect3 = array(__DIR__ . '/dest/folder2/file2.html'); $this->assertEquals(FilesystemTestHelper::cleanPaths($expect3), FilesystemTestHelper::cleanPaths($files)); }