mirror of
https://github.com/zhamao-robot/zhamao-framework.git
synced 2026-03-17 20:54:52 +08:00
1 line
18 KiB
JavaScript
1 line
18 KiB
JavaScript
(window.webpackJsonp=window.webpackJsonp||[]).push([[42],{753:function(s,t,a){"use strict";a.r(t);var e=a(84),n=Object(e.a)({},(function(){var s=this,t=s._self._c;return t("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[t("h1",{attrs:{id:"filesystem-文件系统"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#filesystem-文件系统"}},[s._v("#")]),s._v(" FileSystem 文件系统")]),s._v(" "),t("p",[s._v("文件系统是框架内提供的一个简易的文件管理类。为了让使用框架的开发者更贴近原生的体验,减轻学习负担,这里的 FileSystem 仅提供一些增强的功能。")]),s._v(" "),t("blockquote",[t("p",[s._v("全命名空间:"),t("code",[s._v("ZM\\Store\\FileSystem")]),s._v("。")])]),s._v(" "),t("h2",{attrs:{id:"scandirfiles-扫描目录"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#scandirfiles-扫描目录"}},[s._v("#")]),s._v(" scanDirFiles() - 扫描目录")]),s._v(" "),t("p",[s._v("递归或非递归扫描目录,可返回相对目录的文件列表或绝对目录的文件列表。(非常好用)")]),s._v(" "),t("ul",[t("li",[s._v("定义:"),t("code",[s._v("scanDirFiles(string $dir, bool $recursive = true, $relative = false, bool $include_dir = false)")])]),s._v(" "),t("li",[s._v("返回:"),t("code",[s._v("bool|array")])])]),s._v(" "),t("p",[s._v("参数说明:")]),s._v(" "),t("ul",[t("li",[t("code",[s._v("$dir")]),s._v(":要扫描的目录,必须是绝对路径或 Phar 路径,且路径可读。")]),s._v(" "),t("li",[t("code",[s._v("$recursive")]),s._v(":是否递归扫描子目录,默认为 True,如果设置为 False,则只返回当前目录下的目录和文件列表。")]),s._v(" "),t("li",[t("code",[s._v("$relative")]),s._v(":是否返回相对路径结果。如果为 True,则返回的文件列表为所有文件相对于 "),t("code",[s._v("$dir")]),s._v(" 目录的相对路径。")]),s._v(" "),t("li",[t("code",[s._v("$include_dir")]),s._v(":如果 "),t("code",[s._v("$recursive")]),s._v(" 为 False,本项为 True,即非递归模式下,是否包含目录。")])]),s._v(" "),t("p",[s._v("当目录无法扫描时,返回 False,并将错误信息由 Logger 发出。")]),s._v(" "),t("p",[s._v("我们假设扫描以下目录,该目录位置为 "),t("code",[s._v("/home/ab/test/")]),s._v(",内容有")]),s._v(" "),t("div",{staticClass:"language- line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-text"}},[t("code",[s._v("./\n└── test-app/\n ├── main.php\n ├── empty/\n └── composer.json\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br")])]),t("div",{staticClass:"language-php line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-php"}},[t("code",[t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$result")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token class-name class-name-fully-qualified static-context"}},[t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("ZM"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("Store"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("FileSystem")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("::")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("scanDirFiles")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'/home/ab/test/'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token constant boolean"}},[s._v("true")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token constant boolean"}},[s._v("false")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v('/*\n结果:\n[\n "/home/ab/test/test-app/main.php",\n "/home/ab/test/test-app/composer.json"\n]\n */')]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$result2")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token class-name class-name-fully-qualified static-context"}},[t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("ZM"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("Store"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("FileSystem")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("::")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("scanDirFiles")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'/home/ab/test/'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token constant boolean"}},[s._v("false")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token constant boolean"}},[s._v("true")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token constant boolean"}},[s._v("true")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v('/*\n结果:\n[\n "test-app"\n]\n*/')]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br"),t("span",{staticClass:"line-number"},[s._v("13")]),t("br"),t("span",{staticClass:"line-number"},[s._v("14")]),t("br"),t("span",{staticClass:"line-number"},[s._v("15")]),t("br")])]),t("h2",{attrs:{id:"isrelativepath-检查相对路径"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#isrelativepath-检查相对路径"}},[s._v("#")]),s._v(" isRelativePath() - 检查相对路径")]),s._v(" "),t("p",[s._v('检查路径是否为相对路径(根据第一个字符是否为"/"来判断)。')]),s._v(" "),t("ul",[t("li",[s._v("定义:"),t("code",[s._v("isRelativePath(string $path)")])]),s._v(" "),t("li",[s._v("返回:"),t("code",[s._v("bool")])]),s._v(" "),t("li",[s._v("参数 "),t("code",[s._v("$path")]),s._v(":路径")])]),s._v(" "),t("div",{staticClass:"language-php line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-php"}},[t("code",[t("span",{pre:!0,attrs:{class:"token function"}},[s._v("dump")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token class-name class-name-fully-qualified static-context"}},[t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("ZM"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("Store"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("FileSystem")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("::")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("isRelativePath")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'/a/b/c'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// false")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("dump")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token class-name class-name-fully-qualified static-context"}},[t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("ZM"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("Store"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("FileSystem")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("::")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("isRelativePath")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'aba/bbb/ccc.php'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// true")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("dump")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token class-name class-name-fully-qualified static-context"}},[t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("ZM"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("Store"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("FileSystem")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("::")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("isRelativePath")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'C:\\\\Windows\\\\'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// false")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br")])]),t("h2",{attrs:{id:"createdir-创建目录"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#createdir-创建目录"}},[s._v("#")]),s._v(" createDir() - 创建目录")]),s._v(" "),t("p",[s._v("这个方法封装了 "),t("code",[s._v("mkdir()")]),s._v(" 方法,首先检查目录是否存在,如果不存在就递归创建。")]),s._v(" "),t("p",[s._v("路径默认创建的权限为 755,暂无法调整,如果需要调整,请创建后手动 chmod。")]),s._v(" "),t("p",[s._v("如果创建失败,则抛出一个 "),t("code",[s._v("\\RuntimeException")]),s._v(" 异常。")]),s._v(" "),t("p",[s._v("定义:"),t("code",[s._v("createDir(string $path)")])]),s._v(" "),t("div",{staticClass:"language-php line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-php"}},[t("code",[t("span",{pre:!0,attrs:{class:"token class-name class-name-fully-qualified static-context"}},[t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("ZM"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("Store"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("FileSystem")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("::")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("createDir")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'/path/to/your/directory'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])]),t("h2",{attrs:{id:"getclassespsr4-psr-4-方式读取类列表"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#getclassespsr4-psr-4-方式读取类列表"}},[s._v("#")]),s._v(" getClassesPsr4() - PSR-4 方式读取类列表")]),s._v(" "),t("p",[s._v("根据 PSR-4 规则传入一个目录和基础命名空间,通过扫描文件的方式读取该目录下所有符合 PSR-4 规则的类名。")]),s._v(" "),t("ul",[t("li",[s._v("定义:"),t("code",[s._v("getClassesPsr4(string $dir, string $base_namespace, mixed $rule = null, bool|string $return_path_value = false)")])]),s._v(" "),t("li",[s._v("返回:"),t("code",[s._v("array")])])]),s._v(" "),t("p",[s._v("参数说明:")]),s._v(" "),t("ul",[t("li",[t("code",[s._v("$dir")]),s._v(":要扫描的 PSR-4 目录。")]),s._v(" "),t("li",[t("code",[s._v("$base_namespace")]),s._v(":该 PSR-4 目录级别的命名空间。")]),s._v(" "),t("li",[t("code",[s._v("$rule")]),s._v(":用于自定义识别过滤文件的回调,默认为 null,即自动使用内建规则。关于内建规则,见下方说明。")]),s._v(" "),t("li",[t("code",[s._v("$return_path_value")]),s._v(":是否返回文件路径,返回文件路径的话传入字符串。")])]),s._v(" "),t("p",[s._v("内建规则说明:")]),s._v(" "),t("ul",[t("li",[s._v("默认的内建规则中,如果扫描到的目标目录存在该文件的同名加 "),t("code",[s._v(".ignore")]),s._v(" 后缀的文件,则忽略。")]),s._v(" "),t("li",[s._v("如果扫描到的文件以 "),t("code",[s._v("script_")]),s._v(" 或 "),t("code",[s._v("global_")]),s._v(" 开头,则忽略。")]),s._v(" "),t("li",[s._v("如果扫描到的文件在 "),t("code",[s._v("composer.json")]),s._v(" 中的 "),t("code",[s._v("autoload")]),s._v("."),t("code",[s._v("files")]),s._v(" 列表中存在,则忽略。")])]),s._v(" "),t("p",[s._v("如果 "),t("code",[s._v("$return_path_value")]),s._v(" 为字符串,则结果返回一个 map 格式的数组,键名是类名,键值是该值和类的所在文件的拼接。")]),s._v(" "),t("p",[s._v("我们假设目录结构为:"),t("code",[s._v("src/TestApp")]),s._v(" 的命名空间为 "),t("code",[s._v("\\TestApp")]),s._v(",下面有文件 "),t("code",[s._v("Hello.php")]),s._v(" 对应类 "),t("code",[s._v("TestApp\\Hello")]),s._v(":")]),s._v(" "),t("div",{staticClass:"language-php line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-php"}},[t("code",[t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$result")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token class-name class-name-fully-qualified static-context"}},[t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("ZM"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("Store"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("\\")]),s._v("FileSystem")]),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("::")]),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("getClassesPsr4")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'src/TestApp'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'TestApp\\\\'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v('// 结果:["TestApp\\\\Hello"]')]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br")])]),t("h2",{attrs:{id:"文件读写"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#文件读写"}},[s._v("#")]),s._v(" 文件读写")]),s._v(" "),t("p",[s._v("框架默认推荐你使用 PHP 原生的读写文件方式,例如 "),t("code",[s._v("file_get_contents")]),s._v(",你也可以引入例如 flysystem 等外部组件。\n这取决于你个人的喜好,但在使用第三方文件系统库时需要注意是否兼容协程和多进程。")]),s._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[s._v("提示")]),s._v(" "),t("p",[s._v("无论在使用 "),t("code",[s._v("FileSystem")]),s._v(" 类上方列举提供的扩充功能,还是 PHP 原生的读写文件方式,在框架内涉及目录的位置尽量使用绝对路径。")]),s._v(" "),t("p",[s._v("框架提供了一系列目录常量,可以配合目录常量来构成绝对路径。有关常量的定义,见 "),t("a",{attrs:{href:"/components/common/global-defines"}},[s._v("常量列表")]),s._v("。")]),s._v(" "),t("div",{staticClass:"language-php line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-php"}},[t("code",[t("span",{pre:!0,attrs:{class:"token variable"}},[s._v("$file")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token function"}},[s._v("file_get_contents")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token constant"}},[s._v("WORKING_DIR")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(".")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string single-quoted-string"}},[s._v("'/composer.json'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br")])])])])}),[],!1,null,null,null);t.default=n.exports}}]); |