Skip to content

Commit

Permalink
升级到 4.5.3 (#165)
Browse files Browse the repository at this point in the history
  • Loading branch information
hex-ci authored Jul 10, 2024
1 parent a4638eb commit cc80f95
Show file tree
Hide file tree
Showing 127 changed files with 590 additions and 325 deletions.
5 changes: 5 additions & 0 deletions source/_static/css/citheme.css
Original file line number Diff line number Diff line change
Expand Up @@ -245,6 +245,11 @@ html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(
background-color: #fffff0;
}

span.std,
span.pre {
text-wrap: nowrap;
}

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

.rst-content .success {
Expand Down
2 changes: 2 additions & 0 deletions source/changelogs/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
.. toctree::
:titlesonly:

v4.5.3
v4.5.2
v4.5.1
v4.5.0
v4.4.8
Expand Down
25 changes: 25 additions & 0 deletions source/changelogs/v4.5.2.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#############
版本 4.5.2
#############

发布日期:2024年6月10日

**CodeIgniter4 的 4.5.2 版本发布**

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

***************
消息变更
***************

- 添加了 ``Security.insecureCookie`` 消息。

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

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

发布日期:2024年6月25日

**CodeIgniter4 的 4.5.3 版本发布**

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

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

请查看仓库的
`CHANGELOG.md <https://github.com/codeigniter4/CodeIgniter4/blob/develop/CHANGELOG.md>`_
以获取修复错误的完整列表。
2 changes: 1 addition & 1 deletion source/cli/cli_request.rst
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ getOptions()

.. literalinclude:: cli_request/003.php

getOption($which)
getOption($key)
-----------------

返回被视为选项的特定命令行参数的值:
Expand Down
4 changes: 3 additions & 1 deletion source/concepts/autoloader.rst
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ CodeIgniter 提供了一个非常灵活的自动加载器,只需进行很少
每行的键是命名空间本身。这个不需要尾部反斜杠。
值是可以找到类的目录位置。

默认情况下,命名空间 ``App`` 位于 **app** 目录中,命名空间 ``Config`` 位于 ``app/Config`` 目录中。
默认情况下,命名空间 ``App`` 位于 **app** 目录中,命名空间 ``Config`` 位于 **app/Config** 目录中。

如果你在这些位置根据 `PSR-4`_ 创建类文件,自动加载器将自动加载它们。

Expand All @@ -72,6 +72,8 @@ Config 命名空间

配置文件位于 ``Config`` 命名空间中,而不是你可能预期的 ``App\Config`` 中。这使得核心系统文件即使在应用命名空间发生变化时也能始终找到它们。

.. note:: 自 v4.5.3 appstarter 版本起,``Config\\`` 命名空间已被添加到 **composer.json** 的 ``autoload.psr-4`` 中。

更改应用命名空间
----------------------

Expand Down
6 changes: 6 additions & 0 deletions source/concepts/factories.rst
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,8 @@
.. literalinclude:: factories/013.php
:lines: 2-

.. _factories-passing-fully-qualified-classname:

传递完全限定类名
--------------------------------

Expand Down Expand Up @@ -229,6 +231,8 @@ setOptions 方法

.. versionadded:: 4.4.0

.. important:: 除非你已经仔细阅读了这一节并理解了这个功能是如何工作的,否则不要使用这个功能。否则,你的应用程序将无法正常工作。

为了提高性能,实现了配置缓存。

先决条件
Expand All @@ -242,6 +246,8 @@ setOptions 方法
工作原理
============

.. important:: 一旦缓存,配置值在缓存被删除之前永远不会改变,即使配置文件或 **.env** 发生了变化。

- 如果 Factories 中的 Config 实例的状态发生变化,则在关闭之前将所有 Config 实例保存到缓存文件中。
- 如果有缓存可用,则在 CodeIgniter 初始化之前恢复缓存的 Config 实例。

Expand Down
15 changes: 15 additions & 0 deletions source/concepts/goals.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
##############################
设计与架构目标
##############################

CodeIgniter 的目标是在最小化,最轻量级的开发包中得到最大的执行效率、功能和灵活性。

为了达到这个目标,我们在开发过程的每一步都致力于基准测试、重构和简化工作,拒绝加入任何对实现目标没有帮助的东西。

从技术和架构角度看,CodeIgniter 按照下列目标创建:

- **动态实例化。** 在 CodeIgniter 中,组件的导入和函数的执行都是在被请求的时候才执行,而不是全局的。除核心资源外,系统不需要任何其他资源,因此系统默认是非常轻量级的。HTTP 请求所触发的事件以及你设计的控制器和视图将决定哪些资源是需要加载的。
- **低耦合。** 耦合是指一个系统中组件之间的依赖程度。组件之间的依赖程度越低,系统的重用性和灵活性就越好。我们的目标就是打造一个低耦合的系统。
- **组件专一性。** 专一性指的是组件对某个目标的专注程度。在 CodeIgniter 中,每一个类和方法都是高度独立的,从而可以最大程度地被复用。

CodeIgniter 是一个动态实例化,高度组件专一性的低耦合系统。它在小巧的基础上力求做到简单、灵活和高性能。
1 change: 1 addition & 0 deletions source/concepts/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,4 @@ CodeIgniter4 概览
factories
http
security
goals
14 changes: 8 additions & 6 deletions source/concepts/services.rst
Original file line number Diff line number Diff line change
Expand Up @@ -16,16 +16,16 @@ CodeIgniter 4 中的 **服务** 提供了创建和共享新类实例的功能。

CodeIgniter 的所有核心类都以“服务”提供。这仅仅意味着,不是硬编码一个类名进行加载,而是在一个非常简单的配置文件中定义要调用的类。这个文件充当工厂的角色,用来创建所需类的新实例。

为什么使用服务?
为什么使用服务
=================

一个快速的示例可能会使事情更清楚,所以想象一下,你需要获取 Timer 类的一个实例。最简单的方法就是简单地创建该类的一个新实例:
一个快速的例子可能会让事情更清晰,所以想象一下你需要引入一个 Timer 类的实例。最简单的方法可能就是直接创建这个类的一个新的实例:

.. literalinclude:: services/001.php

这工作得很好。直到你决定要使用另一个定时器类来替换它。也许这个定时器类具有默认定时器不提供的一些高级报告功能。为了做到这一点,你现在需要找到应用程序中使用了定时器类的所有位置。由于你可能已经将它们保留在那里以便持续运行性能日志,所以这可能是一个非常耗时且容易出错的处理方法。这就是服务派上用场的地方。
这工作得很好。直到你决定用一个不同的计时器类来替代它。也许这个类有一些默认计时器不提供的高级报告功能。为了做到这一点,现在你必须找到你应用程序中使用计时器类的所有位置。由于你可能已经将它们保留下来,以持续运行应用程序的性能日志,这可能是一个耗时且容易出错的处理方式。这就是服务派上用场的地方。

与其自己创建实例,不如让一个中心类为我们创建类的实例。这个类非常简单。它只包含每个我们希望用作服务的类的方法。该方法通常返回该类的一个共享实例,并将它可能具有的任何依赖项传递给它。然后,我们将用调用此新类的代码替换定时器创建代码:
我们不是自己创建实例,而是让一个中心类为我们创建类的实例。这个类保持非常简单。它只包含我们想要作为服务使用的每个类的方法。该方法通常返回该类的 **共享实例**,并将任何它可能具有的依赖项传递给它。然后,我们将替换我们的计时器创建代码,使用调用这个全局函数或服务类的代码:

.. literalinclude:: services/002.php

Expand All @@ -40,7 +40,7 @@ CodeIgniter 的所有核心类都以“服务”提供。这仅仅意味着,不

.. literalinclude:: services/013.php

``$typography`` 是一个 Typography 类的实例,如果你再次调用 ``\Config\Services::typography()``,你将会得到完全相同的实例。
``$timer`` 是一个 Timer 类的实例如果你再次调用 ``service('timer')``你将会得到完全相同的实例。

服务通常返回类的共享实例。下面的代码在首次调用时创建一个 ``CURLRequest`` 实例。第二次调用返回完全相同的实例。

Expand All @@ -51,7 +51,7 @@ CodeIgniter 的所有核心类都以“服务”提供。这仅仅意味着,不
获取新实例
======================

如果你想获取 Typography 类的新实例,需要向参数 ``$getShared`` 传递 ``false``:
如果你想获取 Timer 类的新实例,需要向参数 ``$getShared`` 传递 ``false``:

.. literalinclude:: services/014.php

Expand All @@ -67,6 +67,8 @@ service()

.. literalinclude:: services/003.php

.. note:: 自 v4.5.0 起,当你没有向服务传递参数时,推荐使用全局函数 ``service()``,因为性能有所提升。

如果创建方法需要其他参数,可以在服务名称后传入:

.. literalinclude:: services/004.php
Expand Down
3 changes: 3 additions & 0 deletions source/concepts/services/002.php
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
<?php

$timer = service('timer');

// The code above is the same as the code below.
$timer = \Config\Services::timer();
2 changes: 1 addition & 1 deletion source/concepts/services/012.php
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
<?php

$postManager = \Config\Services::postManager();
$postManager = service('postManager');
2 changes: 1 addition & 1 deletion source/concepts/services/013.php
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
<?php

$typography = \Config\Services::typography();
$timer = service('timer');
2 changes: 1 addition & 1 deletion source/concepts/services/014.php
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
<?php

$typography = \Config\Services::typography(false);
$timer = \Config\Services::timer(false);
4 changes: 2 additions & 2 deletions source/concepts/services/015.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@
'baseURI' => 'http://example.com/api/v1/',
'timeout' => 3,
];
$client1 = \Config\Services::curlrequest($options1);
$client1 = service('curlrequest', $options1);

$options2 = [
'baseURI' => 'http://another.example.com/api/v2/',
'timeout' => 10,
];
$client2 = \Config\Services::curlrequest($options2);
$client2 = service('curlrequest', $options2);
// $options2 does not work.
// $client2 is the exactly same instance as $client1.
30 changes: 22 additions & 8 deletions source/concepts/structure.rst
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,22 @@
默认目录
*******************

一个新安装有五个目录:``app/``、``public/``、``writable/``、``tests/`` 和 ``vendor/`` 或 ``system/``。
一个全新安装有 5 个目录:

- **app**
- **public**
- **writable**
- **tests**
- **vendor** 或 **system**

每个目录都有非常具体的作用。

app
===

``app`` 目录是所有应用程序代码的存放位置。它具有默认的目录结构,适用于许多应用程序。以下文件夹组成基本内容:
**app** 目录是所有应用程序代码的存放位置。它具有默认的目录结构,适用于许多应用程序。

以下文件夹组成基本内容:

.. code-block:: none
Expand All @@ -33,16 +42,16 @@ app
ThirdParty/ 应用程序中可以使用的第三方库
Views/ 视图组成向客户端显示的 HTML
由于 ``app`` 目录已经有了命名空间,你应该随意修改此目录的结构以适应应用程序的需要。例如,你可能决定开始使用存储库模式和实体模型来处理数据。在这种情况下,你可以将 ``Models`` 目录重命名为 ``Repositories``,并添加一个新的 ``Entities`` 目录
由于 **app** 目录已经有了命名空间,你可以随意修改此目录的结构以适应应用程序的需要

.. note:: 但是,如果你重命名了 ``Controllers`` 目录,则无法使用自动将请求路由到控制器的方法,并且需要在 routes 文件中定义所有路由
例如,你可能决定开始使用存储库模式和实体模型来处理数据。在这种情况下,你可以将 **Models** 目录重命名为 **Repositories**,并添加一个新的 **Entities** 目录

此目录下的所有文件都位于 ``App`` 命名空间下,尽管你可以在 **app/Config/Constants.php** 中自由更改命名空间。
此目录下的所有文件都位于 ``App`` 命名空间下尽管你可以在 **app/Config/Constants.php** 中自由更改命名空间。

system
======

.. note:: 如果使用 Composer 安装 CodeIgniter, ``system`` 位于 ``vendor/codeigniter4/framework/system``
.. note:: 如果使用 Composer 安装 CodeIgniter,**system** 位于 **vendor/codeigniter4/framework/system**

此目录存储构成框架本身的文件。虽然你在如何使用应用程序目录方面有很大的灵活性,但是不应修改 system 目录中的文件。相反,你应该扩展类或创建新类以提供所需的功能。

Expand All @@ -54,19 +63,24 @@ public
======

**public** 文件夹包含 web 应用程序的面向浏览器的部分,防止直接访问源代码。

它包含主要的 **.htaccess** 文件、**index.php** 以及你添加的任何应用程序资源,如 CSS、JavaScript 或图片。

此文件夹旨在成为站点的“网页根目录”,你的 web 服务器会配置为指向它。

writable
========

此目录包含在应用程序生命周期中可能需要写入的任何目录。这包括用于缓存文件、日志和用户上传的任何目录。你应该在这里添加应用程序需要写入的任何其他目录。这使你可以保持其他主目录不可写,作为额外的安全措施。
此目录包含在应用程序生命周期中可能需要写入的任何目录。这包括用于缓存文件、日志和用户上传的任何目录。

你应该在这里添加应用程序需要写入的任何其他目录。这使你可以保持其他主目录不可写,作为额外的安全措施。

tests
=====

此目录设置为保存测试文件。``_support`` 目录包含可在编写测试时使用的各种模拟类和其他实用程序。此目录不需要传输到生产服务器。
此目录设置为保存测试文件。**_support** 目录包含可在编写测试时使用的各种模拟类和其他实用程序。

此目录不需要传输到生产服务器。

修改目录位置
*****************************
Expand Down
2 changes: 1 addition & 1 deletion source/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
version = '4.5'

# The full version, including alpha/beta/rc tags.
release = '4.5.1'
release = '4.5.3'

# -- General configuration ---------------------------------------------------

Expand Down
14 changes: 7 additions & 7 deletions source/database/configuration.rst
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,12 @@ CodeIgniter 有一个配置文件,可让你存储数据库连接值(用户名、

类属性的名称是连接名称,在连接时可以用作指定组名。

.. note:: SQLite3 数据库的默认位置是在 **writable** 文件夹中。如果要更改位置,则必须设置新文件夹的完整路径
.. note:: SQLite3 数据库的默认位置是 **writable** 文件夹。如果要更改位置,则必须设置新文件夹(例如,'database' => WRITEPATH . 'db/database_name.db')的完整路径

DSN
---

某些数据库驱动程序(如 Postgre、OCI8)需要完整的 DSN 字符串才能连接。但是,如果你没有为需要 DSN 字符串的驱动程序指定 DSN 字符串,CodeIgniter 将尝试使用其余提供的设置来构建它。
某些数据库驱动程序如 Postgre、OCI8需要完整的 DSN(Data Source Name)字符串才能连接。但是如果你没有为需要 DSN 字符串的驱动程序指定 DSN 字符串CodeIgniter 将尝试使用其余提供的设置来构建它。

如果指定了 DSN,你应该使用 ``'DSN'`` 配置设置,就像你正在使用驱动程序的底层原生 PHP 扩展一样,如下所示:

Expand All @@ -39,7 +39,7 @@ DSN
通用方式的 DSN
^^^^^^^^^^^^^^^^^^^^^^^

你还可以以通用方式(URL 格式)设置数据源名称。在这种情况下,DSN 必须具有以下原型:
你还可以以通用方式(URL 格式)设置 DSN。在这种情况下,DSN 必须具有以下原型:

.. literalinclude:: configuration/003.php
:lines: 11-14
Expand Down Expand Up @@ -89,7 +89,7 @@ DSN
使用 .env 文件配置
**************************

你还可以在当前服务器的 **.env** 文件中保存配置值。你只需要输入默认组配置设置中更改的值。值的命名格式应为,其中 ``default`` 是组名称::
你还可以在 **.env** 文件中保存你的配置值,其中包含当前服务器的数据库设置。你只需要输入与默认配置组中的设置不同的值。这些值应该遵循以下格式,其中 ``default`` 是组名::

database.default.username = 'root';
database.default.password = '';
Expand All @@ -110,7 +110,7 @@ DSN
.. _database-config-explanation-of-values:

**********************
值的解释
值的描述
**********************

================ ===========================================================================================================
Expand All @@ -129,7 +129,7 @@ DSN
支持的驱动:``MySQLi``、``Postgre``、``SQLite3``、``SQLSRV`` 和 ``OCI8``。
**DBPrefix** 可选的表前缀,在运行时会添加到表名中 :doc:`查询构造器 <query_builder>` 查询。这允许多个 CodeIgniter 安装共享一个数据库。
**pConnect** true/false (布尔值)- 是否使用持久连接。
**DBDebug** true/false (布尔值)- 数据库错误发生时是否抛出异常
**DBDebug** true/false (布尔值)- 当发生数据库错误时是否抛出异常
**charset** 与数据库通信使用的字符集。
**DBCollat** (仅限 ``MySQLi``)与数据库通信时使用的字符集。
**swapPre** 一个默认的表前缀,应该与 ``DBPrefix`` 互换。这对于分布式应用程序很有用,在那里你可能运行手动编写的查询,并需要最终用户仍可自定义前缀。
Expand Down Expand Up @@ -187,4 +187,4 @@ MySQLi 驱动程序接受包含以下选项的数组:
* ``ssl_ca`` - 证书颁发机构文件的路径
* ``ssl_capath`` - 包含以 PEM 格式存储的可信 CA 证书的目录路径
* ``ssl_cipher`` - 允许用于加密的密码列表,用冒号(``:``)分隔
* ``ssl_verify`` - true/false; 是否验证服务器证书
* ``ssl_verify`` - true/false (布尔值) - 是否验证服务器证书
6 changes: 3 additions & 3 deletions source/database/examples.rst
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
##################################
数据库快速入门:示例代码
快速入门:使用示例
##################################

以下页面包含显示数据库类用法的示例代码。有关完整详细信息,请阅读描述每个函数的单独页面。
Expand All @@ -19,7 +19,7 @@

一旦加载,该类即可按照下述方式使用。

.. note:: 如果所有页面都需要数据库访问,则可以自动连接。有关详细信息,请参阅 :doc:`连接 <connecting>` 页面。
.. note:: 如果所有页面都需要数据库访问,则可以自动连接。有关详细信息,请参阅 :doc:`连接数据库 <connecting>` 页面。

具有多个结果的标准查询(对象版本)
=====================================================
Expand Down Expand Up @@ -59,7 +59,7 @@
查询构建器查询
===================

:doc:`查询构建器模式 <query_builder>` 为你提供了一种简化的检索数据方式:
:doc:`查询构建器 <query_builder>` 为你提供了一种简化的检索数据方式:

.. literalinclude:: examples/007.php

Expand Down
Loading

0 comments on commit cc80f95

Please sign in to comment.