From 614870bcfa7848ffe944b66338d442483fb3feca Mon Sep 17 00:00:00 2001 From: Hex Date: Sat, 28 Oct 2023 12:58:09 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8D=87=E7=BA=A7=E5=88=B0=204.4.3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/changelogs/index.rst | 1 + source/changelogs/v4.3.7.rst | 2 +- source/changelogs/v4.3.8.rst | 2 +- source/changelogs/v4.4.0.rst | 4 +-- source/changelogs/v4.4.1.rst | 4 +-- source/changelogs/v4.4.2.rst | 4 +-- source/changelogs/v4.4.3.rst | 25 +++++++++++++++++ source/concepts/autoloader.rst | 20 ++++++++++---- source/conf.py | 2 +- source/extending/events.rst | 10 ++++--- source/general/environments.rst | 2 ++ source/general/errors.rst | 6 ++++- source/general/helpers.rst | 28 +++++++++++++++---- source/general/modules.rst | 4 +-- source/helpers/index.rst | 2 +- source/installation/upgrade_443.rst | 42 +++++++++++++++++++++++++++++ source/installation/upgrade_4xx.rst | 6 +++-- source/installation/upgrading.rst | 1 + source/libraries/validation.rst | 6 ++++- source/models/model.rst | 6 ++++- 20 files changed, 146 insertions(+), 31 deletions(-) create mode 100644 source/changelogs/v4.4.3.rst create mode 100644 source/installation/upgrade_443.rst diff --git a/source/changelogs/index.rst b/source/changelogs/index.rst index 5418ac16..da77a47c 100644 --- a/source/changelogs/index.rst +++ b/source/changelogs/index.rst @@ -12,6 +12,7 @@ .. toctree:: :titlesonly: + v4.4.3 v4.4.2 v4.4.1 v4.4.0 diff --git a/source/changelogs/v4.3.7.rst b/source/changelogs/v4.3.7.rst index 3b1976a1..c8b7871c 100644 --- a/source/changelogs/v4.3.7.rst +++ b/source/changelogs/v4.3.7.rst @@ -1,7 +1,7 @@ 版本 4.3.7 ############# -发布日期:2023年7月30日 +发布日期:2023 年 7 月 30 日 **CodeIgniter4 4.3.7 版本发布** diff --git a/source/changelogs/v4.3.8.rst b/source/changelogs/v4.3.8.rst index 32b896ca..01bcf479 100644 --- a/source/changelogs/v4.3.8.rst +++ b/source/changelogs/v4.3.8.rst @@ -1,7 +1,7 @@ 版本 4.3.8 ############# -发布日期:2023年8月25日 +发布日期:2023 年 8 月 25 日 **CodeIgniter4 4.3.8 版本发布** diff --git a/source/changelogs/v4.4.0.rst b/source/changelogs/v4.4.0.rst index 141ff94d..493c090e 100644 --- a/source/changelogs/v4.4.0.rst +++ b/source/changelogs/v4.4.0.rst @@ -1,9 +1,9 @@ 版本 4.4.0 ############# -发布日期:2023年8月25日 +发布日期:2023 年 8 月 25 日 -CodeIgniter4 的 4.4.0 版本发布 +**CodeIgniter4 4.4.0 版本发布** .. contents:: :local: diff --git a/source/changelogs/v4.4.1.rst b/source/changelogs/v4.4.1.rst index 12b65f17..365a4c4a 100644 --- a/source/changelogs/v4.4.1.rst +++ b/source/changelogs/v4.4.1.rst @@ -1,9 +1,9 @@ 版本 4.4.1 ############# -发布日期:2023年9月5日 +发布日期:2023 年 9 月 5 日 -**CodeIgniter4 的 4.4.1 版本** +**CodeIgniter4 4.4.1 版本发布** .. contents:: :local: diff --git a/source/changelogs/v4.4.2.rst b/source/changelogs/v4.4.2.rst index b0cec36d..e3945fe2 100644 --- a/source/changelogs/v4.4.2.rst +++ b/source/changelogs/v4.4.2.rst @@ -1,9 +1,9 @@ 版本 4.4.2 ############# -发布日期:2023年10月19日 +发布日期:2023 年 10 月 19 日 -**CodeIgniter4 的 4.4.2 版本** +**CodeIgniter4 4.4.2 版本发布** .. contents:: :local: diff --git a/source/changelogs/v4.4.3.rst b/source/changelogs/v4.4.3.rst new file mode 100644 index 00000000..b5d9d3b9 --- /dev/null +++ b/source/changelogs/v4.4.3.rst @@ -0,0 +1,25 @@ +版本 4.4.3 +############# + +发布日期:2023 年 10 月 26 日 + +**CodeIgniter4 4.4.3 版本发布** + +.. contents:: + :local: + :depth: 3 + +安全性 +******** + +- 修复了 *在生产环境中显示详细错误报告的问题*。 + 有关更多信息,请参阅 `安全公告 GHSA-hwxf-qxj7-7rfj `_。 + +已修复的错误 +************ + +- **UserGuide:** 修复了 :ref:`event-points` 中 ``pre_system`` 和 ``post_system`` 的描述。 + +请参阅仓库的 +`CHANGELOG.md `_ +获取完整的修复 bug 列表。 diff --git a/source/concepts/autoloader.rst b/source/concepts/autoloader.rst index afdb930f..2d990455 100755 --- a/source/concepts/autoloader.rst +++ b/source/concepts/autoloader.rst @@ -29,8 +29,10 @@ CodeIgniter 提供了一个非常灵活的自动加载器,可以通过非常少 初始配置在 **app/Config/Autoload.php** 中完成。该文件包含两个主要数组:一个用于类映射,一个用于 PSR-4 兼容命名空间。 +.. _autoloader-namespaces: + 命名空间 -********** +========== 组织类的推荐方法是为应用程序文件创建一个或多个命名空间。这对于任何业务逻辑相关的类、实体类等尤为重要。配置文件中的 ``$psr4`` 数组允许你将命名空间映射到可以找到这些类的目录: @@ -39,11 +41,19 @@ CodeIgniter 提供了一个非常灵活的自动加载器,可以通过非常少 每行的键是命名空间本身。这个不需要尾部反斜杠。 值是可以找到类的目录位置。 -.. note:: 你可以使用 ``spark namespaces`` 命令检查命名空间配置: +.. _confirming-namespaces: + +确认命名空间 +===================== + +你可以使用 ``spark namespaces`` 命令检查命名空间配置: + +.. code-block:: console - .. code-block:: console + php spark namespaces - php spark namespaces +应用程序命名空间 +===================== 默认情况下,应用程序目录被映射到 ``App`` 命名空间。你必须为应用程序目录中的控制器、库或模型添加命名空间,它们将在 ``App`` 命名空间下被找到。 @@ -57,7 +67,7 @@ CodeIgniter 提供了一个非常灵活的自动加载器,可以通过非常少 .. important:: 配置文件使用 ``Config`` 命名空间,而不是你可能期望的 ``App\Config``。这使得核心系统文件总是能够定位它们,即使应用程序命名空间已更改。 类映射 -******** +======== CodeIgniter 通过不通过文件系统进行额外的 ``is_file()`` 调用来获取系统最后的性能,广泛使用类映射。你可以使用类映射链接到未使用命名空间的第三方库: diff --git a/source/conf.py b/source/conf.py index 1bdc0ec7..aee22c72 100755 --- a/source/conf.py +++ b/source/conf.py @@ -26,7 +26,7 @@ version = '4.4' # The full version, including alpha/beta/rc tags. -release = '4.4.2' +release = '4.4.3' # -- General configuration --------------------------------------------------- diff --git a/source/extending/events.rst b/source/extending/events.rst index 145e5ac0..cde4b756 100644 --- a/source/extending/events.rst +++ b/source/extending/events.rst @@ -64,14 +64,16 @@ Events 库也使你可以在自己的代码中简单地创建事件。要使用 .. literalinclude:: events/008.php -事件点 +.. _event-points: + +事件挂钩点 ============ -以下是 CodeIgniter 核心代码中可用的事件点列表: +以下是 CodeIgniter 核心代码中可用的事件挂钩点列表: -* **pre_system** 在系统执行非常早期时调用。此时仅加载了 benchmark 和 events 类。没有进行路由或其他处理。 +* **pre_system** 在系统执行的早期调用。URI、请求和响应已经实例化,但尚未进行页面缓存检查、路由和执行“before”控制器过滤器。 * **post_controller_constructor** 在控制器实例化后但在任何方法调用发生前立即调用。 -* **post_system** 在向浏览器发送最终渲染页面后调用,在向浏览器发送最终数据后系统执行结束时调用。 +* **post_system** 在系统执行结束后,在最终渲染的页面发送到浏览器之前调用,在执行“after”控制器过滤器之后。 * **email** 从 ``CodeIgniter\Email\Email`` 成功发送邮件后调用。接收 ``Email`` 类属性数组作为参数。 * **DBQuery** 在数据库查询成功或失败后调用。接收 ``Query`` 对象。 * **migrate** 在对 ``latest()`` 或 ``regress()`` 的成功迁移调用后调用。接收 ``MigrationRunner`` 的当前属性以及方法名称。 diff --git a/source/general/environments.rst b/source/general/environments.rst index b06f615c..70923959 100755 --- a/source/general/environments.rst +++ b/source/general/environments.rst @@ -23,6 +23,8 @@ 如果你想要另一个环境,例如用于暂存,你可以添加自定义环境。请参阅 `添加环境`_。 +.. _setting-environment: + ******************* 设置环境 ******************* diff --git a/source/general/errors.rst b/source/general/errors.rst index 00ca4b26..b4958343 100755 --- a/source/general/errors.rst +++ b/source/general/errors.rst @@ -41,7 +41,11 @@ Exceptions 简单来说就是在抛出异常时发生的事件。这将中止脚 错误报告 --------------- -默认情况下,CodeIgniter 将在 ``development`` 和 ``testing`` 环境中显示包含所有错误的详细错误报告,并且在 ``production`` 环境中不显示任何错误。你可以通过在 :ref:`.env ` 文件中设置 ``CI_ENVIRONMENT`` 变量来更改此设置。 +默认情况下,CodeIgniter 在 ``development`` 和 ``testing`` 环境下会显示包含所有错误的详细错误报告,并且在 ``production`` 环境下不会显示任何错误。 + +.. image:: ../images/error.png + +你可以通过设置 ``CI_ENVIRONMENT`` 变量来更改你的环境。请参阅 :ref:`setting-environment`。 .. important:: 禁用错误报告并不会停止在错误发生时写入日志。 diff --git a/source/general/helpers.rst b/source/general/helpers.rst index b0c30476..568e9ef8 100755 --- a/source/general/helpers.rst +++ b/source/general/helpers.rst @@ -16,7 +16,7 @@ CodeIgniter 默认不加载辅助文件,所以使用辅助函数的第一步是加载它。一旦加载,它就可以在你的 :doc:`控制器 <../incoming/controllers>` 和 :doc:`视图 <../outgoing/views>` 中全局使用。 -辅助函数通常存储在 **system/Helpers** 或 **app/Helpers** 目录中。 CodeIgniter 会首先在你的 **app/Helpers** 目录中查找。如果目录不存在或指定的 helper 不在那里,CI 将改为在全局的 **system/Helpers** 目录中查找。 +辅助函数通常存储在 **system/Helpers** 或 **app/Helpers** 目录中。 **************** 加载辅助函数 @@ -24,7 +24,10 @@ CodeIgniter 默认不加载辅助文件,所以使用辅助函数的第一步是 .. note:: URL 辅助函数总是加载的,所以你不需要自己加载它。 -使用以下方法加载辅助文件非常简单: +加载单个辅助函数 +================ + +使用以下方法加载辅助函数文件非常简单: .. literalinclude:: helpers/001.php @@ -38,6 +41,19 @@ CodeIgniter 默认不加载辅助文件,所以使用辅助函数的第一步是 .. note:: 上面的辅助函数加载方法不返回值,所以不要试图将其分配给变量。只按显示的方式使用它。 +自动发现和 Composer 包 +------------------------ + +默认情况下,CodeIgniter 会通过 :ref:`auto-discovery` 在所有定义的命名空间中搜索辅助函数文件。 +你可以使用 spark 命令来检查你定义的命名空间。请参阅 :ref:`confirming-namespaces`。 + +如果你使用了许多 Composer 包,那么你将有许多已定义的命名空间。 +CodeIgniter 默认会扫描所有命名空间。 + +为了避免浪费时间扫描不相关的 Composer 包,你可以手动指定要进行自动发现的包。请参阅 :ref:`modules-specify-composer-packages` 了解详细信息。 + +或者,你可以为要加载的辅助函数 :ref:`指定一个命名空间 `。 + 加载多个辅助函数 ======================== @@ -54,12 +70,14 @@ CodeIgniter 默认不加载辅助文件,所以使用辅助函数的第一步是 但是,如果你想在控制器构造函数中加载,则可以改用 Controller 中的 ``$helpers`` 属性。参见 :ref:`控制器 `。 -.. _helpers-loading-from-non-standard-locations: +.. _helpers-loading-from-specified-namespace: -从非标准位置加载 +从指定命名空间加载 =================================== -只要通过 :doc:`自动加载器配置文件 <../concepts/autoloader>` 中的 PSR-4 部分设置的命名空间可以找到该路径,就可以从 **app/Helpers** 和 **system/Helpers** 之外的目录加载辅助函数。你会使用可以找到它们的命名空间前缀辅助函数的名称。在该命名空间目录内,加载器期望它存在于名为 **Helpers** 的子目录中。一个示例将有助于理解这一点。 +辅助函数可以从 **app/Helpers** 和 **system/Helpers** 之外的目录加载,只要该路径可以在定义的命名空间中找到即可。 + +你会使用可以找到它们的命名空间前缀辅助函数的名称。在该命名空间目录内,加载器期望它存在于名为 **Helpers** 的子目录中。一个示例将有助于理解这一点。 对于此示例,假设我们已经将所有与博客相关的代码分组到自己的命名空间 ``Example\Blog`` 中。文件存在于我们的服务器上的 **Modules/Blog/** 中。因此,我们会将博客模块的辅助函数文件放在 **Modules/Blog/Helpers/** 中。**blog_helper** 文件将位于 **Modules/Blog/Helpers/blog_helper.php**。在我们的控制器中,我们可以使用以下命令加载辅助函数: diff --git a/source/general/modules.rst b/source/general/modules.rst index 6faf59c2..2aa1704a 100755 --- a/source/general/modules.rst +++ b/source/general/modules.rst @@ -201,11 +201,11 @@ For Windows: 辅助函数 ======== -在使用 ``helper()`` 函数时,定义的命名空间内的辅助函数将被自动发现,只要它们在 **Helpers** 目录内: +在使用 :php:func:`helper()` 函数时,定义的命名空间内的辅助函数将被自动发现,只要它们在 **Helpers** 目录内: .. literalinclude:: modules/009.php -你可以指定命名空间。详情请参阅 :ref:`helpers-loading-from-non-standard-locations`。 +你可以指定命名空间。详情请参阅 :ref:`helpers-loading-from-specified-namespace`。 语言文件 ============== diff --git a/source/helpers/index.rst b/source/helpers/index.rst index 1dd9fcc0..7ce8a7c8 100755 --- a/source/helpers/index.rst +++ b/source/helpers/index.rst @@ -2,7 +2,7 @@ 辅助函数 ######## -辅助函数是一些程序功能的集合。 +辅助函数是一些程序功能的集合。另请参阅 :doc:`../general/helpers`。 .. toctree:: :glob: diff --git a/source/installation/upgrade_443.rst b/source/installation/upgrade_443.rst new file mode 100644 index 00000000..4a11645d --- /dev/null +++ b/source/installation/upgrade_443.rst @@ -0,0 +1,42 @@ +############################# +从 4.4.2 升级到 4.4.3 +############################# + +请参考与你的安装方法相对应的升级说明。 + +- :ref:`使用 Composer 安装 App Starter 升级 ` +- :ref:`使用 Composer 将 CodeIgniter4 添加到现有项目中升级 ` +- :ref:`手动安装升级 ` + +.. contents:: + :local: + :depth: 2 + +必要的文件更改 +********************** + +error_exception.php +=================== + +以下文件已经发生了重大更改,**你必须将更新的版本与你的应用程序合并**: + +- app/Views/errors/html/error_exception.php + +项目文件 +************* + +**项目空间** (根目录、app、public、writable) 中的一些文件已经更新。由于这些文件位于 **system** 范围之外,因此在没有你的干预下不会更改。 + +有一些第三方 CodeIgniter 模块可用于帮助合并对项目空间的更改:`在 Packagist 上查看 `_。 + +所有更改 +=========== + +这是 **项目空间** 中所有已经更改的文件的列表;其中许多只是注释或格式化的简单更改,对运行时没有影响: + +- app/Config/Boot/development.php +- app/Config/Boot/production.php +- app/Config/Boot/testing.php +- app/Config/Filters.php +- app/Views/errors/html/error_404.php +- app/Views/errors/html/error_exception.php diff --git a/source/installation/upgrade_4xx.rst b/source/installation/upgrade_4xx.rst index adb30dc7..88c7afc3 100755 --- a/source/installation/upgrade_4xx.rst +++ b/source/installation/upgrade_4xx.rst @@ -110,11 +110,13 @@ CodeIgniter 4 是框架的重写,并且不向后兼容。将你的应用程序 钩子 ===== -- `钩子 `_ 已被 - :doc:`../extending/events` 替换。 +- `钩子 `_ 已被 :doc:`../extending/events` 替换。 - 不再使用 CI3 的 ``$hook['post_controller_constructor']``,现在使用 ``Events::on('post_controller_constructor', ['MyClass', 'MyFunction']);``,命名空间为 ``CodeIgniter\Events\Events;``。 - 事件始终启用,并全局可用。 +- 挂钩点 ``pre_controller`` 和 ``post_controller`` 已被移除。使用 :doc:`../incoming/filters` 代替。 +- 挂钩点 ``display_override`` 和 ``cache_override`` 已被移除。因为基础方法已被移除。 +- 挂钩点 ``post_system`` 已经移动到在发送最终渲染页面之前。 扩展框架 ======================= diff --git a/source/installation/upgrading.rst b/source/installation/upgrading.rst index 498cdfa7..3d488872 100755 --- a/source/installation/upgrading.rst +++ b/source/installation/upgrading.rst @@ -14,6 +14,7 @@ backward_compatibility_notes + upgrade_443 upgrade_442 upgrade_441 upgrade_440 diff --git a/source/libraries/validation.rst b/source/libraries/validation.rst index 159036f2..61a4c3fc 100755 --- a/source/libraries/validation.rst +++ b/source/libraries/validation.rst @@ -806,7 +806,8 @@ valid_cc_number 是 验证信用卡号是否与指定提供程 ======================= ========== ============================================================ =================================================== 规则 参数 描述 示例 ======================= ========== ============================================================ =================================================== -uploaded 是 如果参数的名称与任何上传的文件的名称不匹配,则失败。 ``uploaded[field_name]`` +uploaded 是 如果参数的名称与任何上传文件的名称不匹配,则会失败。 ``uploaded[field_name]`` + 如果你希望文件上传是可选的(不是必需的),则不要定义此规则。 max_size 是 如果名为参数的上传文件大于第二个参数的千字节(kb),则失败。 或者如果文件大于 php.ini 配置文件中声明的 最大大小 - ``upload_max_filesize`` 指令。 @@ -819,3 +820,6 @@ is_image 是 如果根据 mime 类型无法确定文件 ======================= ========== ============================================================ =================================================== 文件验证规则适用于单个和多个文件上传。 + +.. note:: 仅可以使用专门为文件验证创建的规则(如上表中列出的规则)来验证文件。 + 因此,将任何通用规则(如 ``permit_empty``)添加到文件验证规则数组或字符串中,文件验证将无法正常工作。 diff --git a/source/models/model.rst b/source/models/model.rst index e2ae53c6..eb5b83a0 100644 --- a/source/models/model.rst +++ b/source/models/model.rst @@ -58,7 +58,11 @@ initialize() 连接数据库 ========================== -当类首次实例化时,如果没有向构造函数传递数据库连接实例,它将自动连接到配置中设置的默认数据库组。你可以通过在类中添加 ``$DBGroup`` 属性为每个模型修改使用的组。这确保模型内对 ``$this->db`` 的任何引用都通过适当的连接进行。 +当首次实例化类时,如果没有将数据库连接实例传递给构造函数,并且如果你没有在模型类上设置 ``$DBGroup`` 属性, +它将自动连接到数据库配置中设置的默认数据库组。 + +你可以通过在类中添加 ``$DBGroup`` 属性来修改每个模型使用的组。 +这样可以确保在模型内部,对 ``$this->db`` 的任何引用都通过适当的连接进行。 .. literalinclude:: model/004.php