zhamao-framework/assets/js/42.d8f92f99.js
2024-09-19 08:29:13 +00:00

1 line
18 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

(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}}]);