Skip to content

Commit

Permalink
Merge pull request #161 from CodeIgniter-Chinese/upgrade-4.4.2
Browse files Browse the repository at this point in the history
Upgrade 4.4.2
  • Loading branch information
hex-ci authored Oct 27, 2023
2 parents 8bef592 + 493ff47 commit ba07b37
Show file tree
Hide file tree
Showing 242 changed files with 4,275 additions and 1,202 deletions.
4 changes: 4 additions & 0 deletions source/_static/css/citheme.css
Original file line number Diff line number Diff line change
Expand Up @@ -241,6 +241,10 @@ html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(
margin-top: 2rem;
}

.highlight-console .highlight {
background-color: #fffff0;
}

/* Messages ----------------------------------------------------------------- */

.rst-content .success {
Expand Down
4 changes: 4 additions & 0 deletions source/_static/css/citheme_dark.css
Original file line number Diff line number Diff line change
Expand Up @@ -343,4 +343,8 @@
.highlight .ni {
color: #b780b7;
}

.highlight-console .highlight pre {
background: #434343;
}
}
5 changes: 5 additions & 0 deletions source/changelogs/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,11 @@
.. toctree::
:titlesonly:

v4.4.2
v4.4.1
v4.4.0
v4.3.8
v4.3.7
v4.3.6
v4.3.5
v4.3.4
Expand Down
2 changes: 1 addition & 1 deletion source/changelogs/v4.1.1.rst
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

- 修复了 ``.gitattributes`` 阻止框架下载的问题。

请注意,此修复也被回溯应用于 **framework** 仓库中的 ``4.0.5``
请注意,此修复也被回溯应用于 **framework** 仓库中的 4.0.5

有关已修复的错误列表,请参见仓库的
`CHANGELOG_4.1.md <https://github.com/codeigniter4/CodeIgniter4/blob/develop/changelogs/CHANGELOG_4.1.md>`_。
30 changes: 30 additions & 0 deletions source/changelogs/v4.3.7.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
版本 4.3.7
#############

发布日期:2023年7月30日

**CodeIgniter4 4.3.7 版本发布**

.. contents::
:local:
:depth: 3

重大变更
********

- **路由集合 (RouteCollection):** 在 ``RouteCollection::getRoutes()`` 方法中添加了第二个参数 ``bool $includeWildcard = true``。
- **AutoRouting Legacy:** ``AutoRouter::__construct()`` 的第一个参数从 ``$protectedControllers`` 更改为 ``$cliRoutes``。
- **FeatureTestTrait:** 当使用 :ref:`withBodyFormat() <feature-formatting-the-request>` 时,请求正文的优先级已更改。详情请参考 :ref:`升级指南 <upgrade-437-feature-testing>`。
- **验证 (Validation):** ``Validation::loadRuleGroup()`` 的返回值从“**规则数组**”更改为“**规则数组** 和* *自定义错误数组** 的 **数组**” (``[rules, customErrors]``)。

变更
*******

- 数字辅助函数 :php:func:`number_to_amount()`,以前返回“1000”,现在在数字恰好为1000时已更正为返回“1千”。

已修复的错误
************

- **自动路由遗留功能:** 修复了一个问题,当你使用 ``$routes->add()`` 添加路由时,控制器的其他方法在Web浏览器中无法访问。

请查看仓库的 `CHANGELOG.md <https://github.com/codeigniter4/CodeIgniter4/blob/develop/CHANGELOG.md>`_ 以获取已修复错误的完整列表。
21 changes: 21 additions & 0 deletions source/changelogs/v4.3.8.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
版本 4.3.8
#############

发布日期:2023年8月25日

**CodeIgniter4 4.3.8 版本发布**

.. contents::
:local:
:depth: 3

已修复的错误
************

- **控制器过滤器 (Controller Filters):** 在以前的版本中,``['except' => []]`` 或 ``['except' => '']``
意味着“排除所有”。已修复此错误,现在

- ``['except' => []]`` 意味着不排除任何内容。
- ``['except' => '']`` 意味着只排除基础URL。

请查看仓库的 `CHANGELOG.md <https://github.com/codeigniter4/CodeIgniter4/blob/develop/CHANGELOG.md>`_ 以获取已修复错误的完整列表。
304 changes: 304 additions & 0 deletions source/changelogs/v4.4.0.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,304 @@
版本 4.4.0
#############

发布日期:2023年8月25日

CodeIgniter4 的 4.4.0 版本发布

.. contents::
:local:
:depth: 3

亮点
**********

- 调试工具栏现在具有新的“热重载”功能
(** `lonnieezell <https://github.com/lonnieezell>`_ 贡献)。
请参阅 `测试`_。

重大变更
********

行为变更
================

URI::setSegment() 和不存在的段
------------------------------------------

当你设置最后一个 ``+2`` 段时,现在会抛出异常。
在之前的版本中,只有当指定了最后一个段的 ``+3`` 或更多时才会抛出异常。请参阅 :ref:`upgrade-440-uri-setsegment`。

当前最后一个段的下一个段(``+1``)可以像以前一样设置。

.. _v440-factories:

工厂
---------

使用命名空间传递类名
^^^^^^^^^^^^^^^^^^^^^^^^^^^^

现在,只有在请求 :ref:`不带命名空间的类名 <factories-passing-classname-without-namespace>` 时,``preferApp`` 才起作用。

例如,当你调用 ``model(\Myth\Auth\Models\UserModel::class)`` 或
``model('Myth\Auth\Models\UserModel')`` 时:

- 之前:

- 如果存在 ``App\Models\UserModel`` 并且 ``preferApp`` 为 true(默认值),则返回该类
- 如果存在 ``Myth\Auth\Models\UserModel`` 并且 ``preferApp`` 为 false,则返回该类

- 现在:

- 无论 ``preferApp`` 是否为 true(默认值),都返回 ``Myth\Auth\Models\UserModel``
- 如果在调用 ``model()`` 之前定义了 ``Factories::define('models', 'Myth\Auth\Models\UserModel', 'App\Models\UserModel')``,则返回 ``App\Models\UserModel``

如果你错误地传递了一个不存在的类名,之前的版本会返回 ``App`` 或 ``Config`` 命名空间中的类实例,因为存在 ``preferApp`` 功能。

例如,在控制器(``namespace App\Controllers``)中,如果你错误地调用了 ``config(Config\App::class)`` (注意类名缺少前导的 ``\``),实际上传递的是 ``App\Controllers\Config\App``。
但是该类不存在,因此 Factories 现在将返回 ``null``。

属性名称
^^^^^^^^^^^^^

属性 ``Factories::$basenames`` 已更名为 ``$aliases``。

自动加载器
----------

以前,CodeIgniter 的自动加载器允许加载以 `.php` 扩展名结尾的类名。这意味着可以实例化类似 `new Foo.php()` 的对象,并将其实例化为 `new Foo()`。由于 `Foo.php` 是无效的类名,自动加载器的行为已更改。现在,实例化这样的类将失败。

.. _v440-codeigniter-and-exit:

CodeIgniter 和 exit()
----------------------

``CodeIgniter::run()`` 方法不再调用 ``exit(EXIT_SUCCESS)``。退出调用已移至 **public/index.php**。

.. _v440-site-uri-changes:

站点 URI 更改
----------------

添加了一个扩展了 ``URI`` 类并表示站点 URI 的新 ``SiteURI`` 类,并且现在在许多需要当前 URI 的地方使用它。

控制器中的 ``$this->request->getUri()`` 返回 ``SiteURI`` 实例。
此外,:php:func:`site_url()` 、:php:func:`base_url()` 和 :php:func:`current_url()`
在内部使用 SiteURI。

getPath()
^^^^^^^^^

``getPath()`` 方法现在始终返回带有前导 ``/`` 的完整 URI 路径。
因此,当你的 baseURL 具有子目录并且你想获取相对于 baseURL 的路径时,必须使用新的 ``getRoutePath()`` 方法。

例如::

baseURL: http://localhost:8888/CodeIgniter4/
当前 URI: http://localhost:8888/CodeIgniter4/foo/bar
getPath(): /CodeIgniter4/foo/bar
getRoutePath(): foo/bar

站点 URI 值
^^^^^^^^^^^^^^^

SiteURI 类现在比以前更严格地规范化站点 URI,并修复了一些错误。

因此,与之前的版本相比,框架可能会以稍微不同的方式返回站点 URI 或 URI 路径。
例如,在 ``index.php`` 之后会添加 ``/``::

http://example.com/test/index.php?page=1
http://example.com/test/index.php/?page=1

.. _v440-interface-changes:

接口更改
=================

.. note:: 只要你没有扩展相关的 CodeIgniter 核心类或实现这些接口,所有这些更改都是向后兼容的,无需干预。

- **Validation:** 在 ``ValidationInterface`` 中添加了 ``getValidated()`` 方法。

.. _v440-method-signature-changes:

方法签名更改
========================

.. _v440-parameter-type-changes:

参数类型更改
----------------------

- **Services:**
- ``Services::security()`` 的第一个参数已从 ``Config\App`` 更改为 ``Config\Security``。
- ``Services::session()`` 的第一个参数已从 ``Config\App`` 更改为 ``Config\Session``。
- **Session:**
- ``Session::__construct()`` 的第二个参数已从 ``Config\App`` 更改为 ``Config\Session``。
- 数据库的 ``BaseHandler``、``DatabaseHandler``、``FileHandler``、``MemcachedHandler`` 和 ``RedisHandler`` 中的 ``__construct()`` 的第一个参数已从 ``Config\App`` 更改为 ``Config\Session``。
- **Security:** ``Security::__construct()`` 的第一个参数已从 ``Config\App`` 更改为 ``Config\Security``。
- **Validation:** ``Validation::check()`` 的方法签名已更改。``$rule`` 参数上的 ``string`` 类型提示已被删除。
- **CodeIgniter:** ``CodeIgniter::setRequest()`` 的方法签名已更改。``$request`` 参数上的 ``Request`` 类型提示已被删除。
- **FeatureTestCase:**
- ``FeatureTestCase::populateGlobals()`` 的方法签名已更改。``$request`` 参数上的 ``Request`` 类型提示已被删除。
- ``FeatureTestCase::setRequestBody()`` 的方法签名已更改。``$request`` 参数上的 ``Request`` 类型提示和返回类型 ``Request`` 已被删除。

添加的参数
----------------

- **Routing:** 在 ``RouteCollection::__construct()`` 中添加了第三个参数 ``Routing $routing``。

删除的参数
------------------

- **Services:** 在 ``Services::exceptions()`` 中删除了第二个参数 ``$request`` 和第三个参数 ``$response``。
- **错误处理:** 在 ``CodeIgniter\Debug\Exceptions::__construct()`` 中删除了第二个参数 ``$request`` 和第三个参数 ``$response``。

返回类型更改
-------------------

- **自动加载器:** ``loadClass`` 和 ``loadClassmap`` 方法的返回签名都改为 ``void``,以便与 ``spl_autoload_register`` 和 ``spl_autoload_unregister`` 函数中的回调兼容。

增强功能
************

命令
========

- **spark routes:**
- 现在你可以在请求 URL 中指定主机。
请参阅 :ref:`routing-spark-routes-specify-host`。
- 它在 *Handler* 中显示 :ref:`view-routes` 的视图文件,如下所示:

+---------+-------------+------+------------------------------+----------------+---------------+
| Method | Route | Name | Handler | Before Filters | After Filters |
+---------+-------------+------+------------------------------+----------------+---------------+
| GET | about | » | (View) pages/about | | toolbar |
+---------+-------------+------+------------------------------+----------------+---------------+


测试
=======

- **调试工具栏:**
- 调试工具栏现在具有新的“热重载”功能,可以在文件更改时自动重新加载页面。
请参阅 :ref:`debug-toolbar-hot-reload`。
- 现在,在 *Routes* 选项卡的 *DEFINED ROUTES* 中显示 :ref:`view-routes`。

数据库
========

- **MySQLi:** 在数据库配置中添加了 ``numberNative`` 属性,以保持 SQL 查询后获取的变量类型与数据库中设置的类型一致。
请参阅 :ref:`Database Configuration <database-config-explanation-of-values>`。
- **SQLSRV:** 字段元数据现在包括 ``nullable``。请参阅 :ref:`db-metadata-getfielddata`。

模型
=====

- 为实体添加了特殊的 getter/setter,以避免方法名称冲突。
请参阅 :ref:`entities-special-getter-setter`。

=========

- **Validation:** 添加了 ``Validation::getValidated()`` 方法,用于获取实际验证的数据。请参阅 :ref:`validation-getting-validated-data` 了解详细信息。
- **Images:** 现在可以使用选项 ``$quality`` 压缩 WebP 图像。
- **Uploaded Files:** 添加了 ``UploadedFiles::getClientPath()`` 方法,如果通过目录上传方式上传文件,则返回文件的 `full_path` 索引的值。
- **CURLRequest:** 添加了请求选项 ``proxy``。请参阅 :ref:`CURLRequest Class <curlrequest-request-options-proxy>`。
- **URI:** 添加了一个扩展了 ``URI`` 并表示站点 URI 的新 ``SiteURI`` 类。

辅助函数和方法
=====================

- **Array:** 添加了 :php:func:`array_group_by()` 辅助函数,用于将数据值分组在一起。支持点符号语法。
- **Common:** :php:func:`force_https()` 不再终止应用程序,而是抛出 ``RedirectException``。

其他
======

- **DownloadResponse:** 添加了 ``DownloadResponse::inline()`` 方法,将 ``Content-Disposition: inline`` 标头设置为在浏览器中显示文件。
请参阅 :ref:`open-file-in-browser` 了解详细信息。
- **View:** 在 ``renderSection()`` 上添加了可选的第二个参数 ``$saveData``,以防止在显示后自动清除数据。请参阅 :ref:`View Layouts <creating-a-layout>` 了解详细信息。
- **自动路由(改进):**
- 现在你可以路由到模块。请参阅 :ref:`auto-routing-improved-module-routing` 了解详细信息。
- 如果找到与 URI 段对应的控制器,并且该控制器没有为该 URI 段定义的方法,则将执行默认方法。这样可以更灵活地处理自动路由中的 URI。请参阅 :ref:`controller-default-method-fallback` 了解详细信息。
- **过滤器:** 现在可以在 :ref:`$filters 属性 <filters-filters-filter-arguments>` 中使用过滤器参数。
- **请求:** 添加了 ``IncomingRequest::setValidLocales()`` 方法,用于设置有效的区域设置。
- **Table:** 添加了 ``Table::setSyncRowsWithHeading()`` 方法,用于将行列与标题同步。请参阅 :ref:`table-sync-rows-with-headings` 了解详细信息。
- **错误处理:** 现在可以使用 :ref:`custom-exception-handlers`。
- **RedirectException:**
- 它还可以接受实现 ``ResponseInterface`` 的对象作为第一个参数。
- 它实现了 ``ResponsableInterface``。
- **Factories:**
- 现在可以定义实际加载的类名。请参阅 :ref:`factories-defining-classname-to-be-loaded`。
- 实现了配置缓存。请参阅 :ref:`factories-config-caching` 了解详细信息。

消息更改
***************

- 添加了 ``Core.invalidDirectory`` 错误消息。
- 改进了 ``HTTP.invalidHTTPProtocol`` 错误消息。

变更
*******

- **Images:** 在 ``GDHandler`` 中,WebP 的默认质量从 80 改为 90。
- **Config:**
- 删除了 **app/Config/App.php** 中已弃用的 Cookie 项。
- 删除了 **app/Config/App.php** 中已弃用的 Session 项。
- 删除了 **app/Config/App.php** 中已弃用的 CSRF 项。
- 将路由设置移至 **app/Config/Routing.php** 配置文件。
请参阅 :ref:`Upgrading Guide <upgrade-440-config-routing>`。
- **DownloadResponse:** 在生成响应标头时,如果之前已指定了 ``Content-Disposition`` 标头,则不替换它。
- **自动加载器:**
- 在 v4.4.0 之前,CodeIgniter 的自动加载器不允许在某些操作系统上的文件名中使用特殊字符。
可以使用的符号是 ``/``、``_``、``.``、``:``、``\`` 和空格。
因此,如果你将 CodeIgniter 安装在包含特殊字符(如 ``(``、``)`` 等)的文件夹中,CodeIgniter 将无法工作。
从 v4.4.0 开始,此限制已被移除。
- ``Autoloader::loadClass()`` 和 ``Autoloader::loadClassmap()`` 方法现在都标记为 ``@internal``。
- **RouteCollection:** 受保护属性 ``$routes`` 的数组结构已进行了修改以提高性能。
- **HSTS:** 现在,无论是通过 :php:func:`force_https()` 还是 ``Config\App::$forceGlobalSecureRequests = true``,都会设置 HTTP 状态码 307,允许在重定向后保留 HTTP 请求方法。
在之前的版本中,它是 302。

弃用
************

- **Entity:** 弃用了 ``Entity::setAttributes()`` 方法。请改用 ``Entity::injectRawData()``。
- **错误处理:** 弃用了 ``CodeIgniter\Debug\Exceptions`` 中的许多方法和属性。因为这些方法已移至 ``BaseExceptionHandler`` 或 ``ExceptionHandler``。
- **自动加载器:** 弃用了 ``Autoloader::sanitizeFilename()``。
- **CodeIgniter:**
- 弃用了 ``CodeIgniter::$returnResponse`` 属性。不再使用。
- 弃用了 ``CodeIgniter::$cacheTTL`` 属性。不再使用。请改用 ``ResponseCache``。
- 弃用了 ``CodeIgniter::cache()`` 方法。不再使用。请改用 ``ResponseCache``。
- 弃用了 ``CodeIgniter::cachePage()`` 方法。不再使用。请改用 ``ResponseCache``。
- 弃用了 ``CodeIgniter::generateCacheName()`` 方法。不再使用。请改用 ``ResponseCache``。
- 弃用了 ``CodeIgniter::callExit()`` 方法。不再使用。
- **RedirectException:** 弃用了 ``\CodeIgniter\Router\Exceptions\RedirectException``。请改用 ``\CodeIgniter\HTTP\Exceptions\RedirectException``。
- **Session:** 弃用了 ``Session`` 中的属性 ``$sessionDriverName``、``$sessionCookieName``、
``$sessionExpiration``、``$sessionSavePath``、``$sessionMatchIP``、
``$sessionTimeToUpdate`` 和 ``$sessionRegenerateDestroy``,不再使用。请改用 ``$config``。
- **Security:** 弃用了 ``Security`` 中的属性 ``$csrfProtection``、``$tokenRandomize``、
``$tokenName``、``$headerName``、``$expires``、``$regenerate`` 和
``$redirect``,不再使用。请改用 ``$config``。
- **URI:**
- 弃用了 ``URI::$uriString``。
- 弃用了 ``URI::$baseURL``。请改用 ``SiteURI``。
- 弃用了 ``URI::setSilent()``。
- 弃用了 ``URI::setScheme()``。请改用 ``withScheme()``。
- 弃用了 ``URI::setURI()``。

- **IncomingRequest:**
- 弃用了 ``IncomingRequest::detectURI()``,不再使用。
- 弃用了 ``IncomingRequest::detectPath()``,不再使用。已移至 ``SiteURIFactory``。
- 弃用了 ``IncomingRequest::parseRequestURI()``,不再使用。已移至 ``SiteURIFactory``。
- 弃用了 ``IncomingRequest::parseQueryString()``,不再使用。已移至 ``SiteURIFactory``。
- 弃用了 ``IncomingRequest::setPath()``。

已修复的错误
************

- **自动路由(改进):** 在之前的版本中,当 ``$translateURIDashes`` 为 true 时,两个 URI 对应于单个控制器方法,一个 URI 用于破折号(例如 **foo-bar**),另一个 URI 用于下划线(例如 **foo_bar**)。修复了此错误。现在,下划线的 URI(**foo_bar**)无法访问。
- **输出缓冲:** 修复了输出缓冲的错误。
- **ControllerTestTrait:** ``ControllerTestTrait::withUri()`` 使用 URI 创建一个新的 Request 实例。因为 Request 实例应该具有 URI 实例。此外,如果 URI 字符串中的主机名与 ``Config\App`` 中的有效主机名不匹配,则将设置有效的主机名。

有关修复的所有错误的完整列表,请参阅存储库的 `CHANGELOG.md <https://github.com/codeigniter4/CodeIgniter4/blob/develop/CHANGELOG.md>`_。
Loading

0 comments on commit ba07b37

Please sign in to comment.