mirror of
https://github.com/yiisoft/yii2.git
synced 2025-11-20 00:20:44 +08:00
Improved FileHelper::filterPath()
This commit is contained in:
@@ -134,9 +134,14 @@ class FileHelper
|
|||||||
*
|
*
|
||||||
* - dirMode: integer, the permission to be set for newly copied directories. Defaults to 0777.
|
* - dirMode: integer, the permission to be set for newly copied directories. Defaults to 0777.
|
||||||
* - fileMode: integer, the permission to be set for newly copied files. Defaults to the current environment setting.
|
* - fileMode: integer, the permission to be set for newly copied files. Defaults to the current environment setting.
|
||||||
* - filter: callback, a PHP callback that is called for each sub-directory or file.
|
* - filter: callback, a PHP callback that is called for each directory or file.
|
||||||
* If the callback returns false, then the sub-directory or file will not be copied.
|
* The signature of the callback should be: `function ($path)`, where `$path` refers the full path to be filtered.
|
||||||
* The signature of the callback should be: `function ($path)`, where `$path` refers the full path to be copied.
|
* The callback can return one of the following values:
|
||||||
|
*
|
||||||
|
* * true: the directory or file will be copied (the "only" and "except" options will be ignored)
|
||||||
|
* * false: the directory or file will NOT be copied (the "only" and "except" options will be ignored)
|
||||||
|
* * null: the "only" and "except" options will determine whether the directory or file should be copied
|
||||||
|
*
|
||||||
* - only: array, list of patterns that the files or directories should match if they want to be copied.
|
* - only: array, list of patterns that the files or directories should match if they want to be copied.
|
||||||
* A path matches a pattern if it contains the pattern string at its end.
|
* A path matches a pattern if it contains the pattern string at its end.
|
||||||
* Patterns ending with '/' apply to directory paths only, and patterns not ending with '/'
|
* Patterns ending with '/' apply to directory paths only, and patterns not ending with '/'
|
||||||
@@ -209,9 +214,14 @@ class FileHelper
|
|||||||
* @param string $dir the directory under which the files will be looked for.
|
* @param string $dir the directory under which the files will be looked for.
|
||||||
* @param array $options options for file searching. Valid options are:
|
* @param array $options options for file searching. Valid options are:
|
||||||
*
|
*
|
||||||
* - filter: callback, a PHP callback that is called for each sub-directory or file.
|
* - filter: callback, a PHP callback that is called for each directory or file.
|
||||||
* If the callback returns false, then the sub-directory or file will be excluded from the returning result.
|
|
||||||
* The signature of the callback should be: `function ($path)`, where `$path` refers the full path to be filtered.
|
* The signature of the callback should be: `function ($path)`, where `$path` refers the full path to be filtered.
|
||||||
|
* The callback can return one of the following values:
|
||||||
|
*
|
||||||
|
* * true: the directory or file will be returned (the "only" and "except" options will be ignored)
|
||||||
|
* * false: the directory or file will NOT be returned (the "only" and "except" options will be ignored)
|
||||||
|
* * null: the "only" and "except" options will determine whether the directory or file should be returned
|
||||||
|
*
|
||||||
* - only: array, list of patterns that the files or directories should match if they want to be returned.
|
* - only: array, list of patterns that the files or directories should match if they want to be returned.
|
||||||
* A path matches a pattern if it contains the pattern string at its end.
|
* A path matches a pattern if it contains the pattern string at its end.
|
||||||
* Patterns ending with '/' apply to directory paths only, and patterns not ending with '/'
|
* Patterns ending with '/' apply to directory paths only, and patterns not ending with '/'
|
||||||
@@ -253,8 +263,11 @@ class FileHelper
|
|||||||
*/
|
*/
|
||||||
public static function filterPath($path, $options)
|
public static function filterPath($path, $options)
|
||||||
{
|
{
|
||||||
if (isset($options['filter']) && !call_user_func($options['filter'], $path)) {
|
if (isset($options['filter'])) {
|
||||||
return false;
|
$result = call_user_func($options['filter'], $path);
|
||||||
|
if (is_bool($result)) {
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
$path = str_replace('\\', '/', $path);
|
$path = str_replace('\\', '/', $path);
|
||||||
if (is_dir($path)) {
|
if (is_dir($path)) {
|
||||||
@@ -270,10 +283,11 @@ class FileHelper
|
|||||||
}
|
}
|
||||||
if (!empty($options['only'])) {
|
if (!empty($options['only'])) {
|
||||||
foreach ($options['only'] as $name) {
|
foreach ($options['only'] as $name) {
|
||||||
if (StringHelper2::substr($path, -StringHelper2::strlen($name), $n) !== $name) {
|
if (StringHelper2::substr($path, -StringHelper2::strlen($name), $n) === $name) {
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user