CakePHP

CakePHP提供web开发功能,可以在软件上快速设计新的应用程序,软件提供代码生成功能,可以快速构建新的应用程序原型,提供引导功能,添加数据库、配置HTTP、验证身份、翻译、缓存等功能都可以直接在软件找到,不需要自己从头配置项目,CakePHP包括一个符合PSR-18的HTTP客户端,可用于发出请求,这是与Web服务和远程API通信的好方法,CakePHP核心分为多个可以使用的程序包,灵活而强大的数据库象库,带有熟悉的类似PDO的API,提供可用于不同数据存储的实体和查询的连接管理和特征,提供一组用于纵数组或可遍历对象的工具的库,提供实用程序类,例如Inflector,Text,Hash,Secuty和Xml,帮助用户快速设计新的web程序!

CakePHP新的功能

V.4的新功能

CakePHP 4.0.0与其他主要的CakePHP版本一样好,但是现在将要求您使用PHP 7.2。通过更新的应用程序框架设计,CakePHP 4.0.0附带了简化的API,使您的开发和应用程序更快。

虽然4.0包含许多重大更改,但我们已经准备了详尽的迁移指南,涵盖了所有不推荐使用和已删除的功能,并突出了闪亮的新功能。

1、Console

命令类可以实现该defltName()方法以覆盖基于CLI的约定。

2、核心

InstanceConfigTrait::getConfigOrFail()和 StaticConfigTrait::getConfigOrFail()添加。与其他orFail 方法一样,当所请求的键不存在或没有null值时,这些方法将引发异常。

3、数据库

如果数据库的时区与PHP时区不匹配,则可以使用 DateTime::setDatabaseTimezone()。

DateTime::setKeepDatabaseTimezone() 允许您将数据库时区保留在查询创建的DateTime对象中。

CakeDatabaseLogLoggedQuery现在实施JsonSealizable。

CakeDatabaseConnection现在允许使用任何PSR-3记录器。结果,那些使用数据库软件包的用户不再被迫使用该cakephp/log软件包进行志记录。

CakeDatabaseConnection现在允许使用任何PSR-16缓存。结果,那些使用数据库软件包的用户不再被迫使用该cakephp/cache软件包进行缓存。新方法CakeDatabaseConnection::setCacher() ,CakeDatabaseConnection::getCacher()并已添加。

CakeDatabaseConstraintsIntece提取自 CakeDatasourceFixtureIntece。该接口应通过支持约束的夹具实现来实现,根据我们的经验,这些约束通常是关系数据库。

在char加入象类型。此类型处理固定长度的字符串列。

在datetimefractional和timestampfractional象类型添加。这些类型使用小数秒处理列数据类型。

SqlServer架构现在支持默认值,其中包含诸如SYSDATETIME()之类的函数。

在datetimetimezone和timestamptimezone象类型添加。这些类型处理带有时区支持的列数据类型。

4、Http

您可以在cakephp/http不包含整个框架的情况下使用。

CakePHP现在支持PSR-15:HTTP请求处理程序规范。结果,中间件得以实现PsrHttpServerMiddlewareIntece。仍然支持CakePHP 3.x样式的可调用双程中间件,以实现向后兼容。

CakeHttpClient现在遵循PSR-18:HTTP客户端规范。

CakeHttpClientResponse::isSuccess()加入。如果响应状态代码为2xx,则此方法返回true。

pMiddleware 添加了使内容安全策略标头的定义更加简单的功能。

HttpsEnforcerMiddleware加入。这取代了的requireSecure 功能SecutyComponent。

Cookies现在支持该SameSite属。

5、邮件程序

电子邮件生成责任现已转移到 CakeMailerRenderer。这主要是架构上的更改,并不影响Email类的使用方式。唯一的区别是您现在需要使用Email::setViewVars()而不是Email::set()设置模板变量。

6、ORM

Table::saveManyOrFail()已添加方法,该方法将PersistenceFailedException 与发生错误的失败的特定实体一起抛出。实体被保存为交易安全的。

Table::Many()并Table::ManyOrFail()添加了一次删除多个实体(包括回调)的方法。实体被删除交易安全。

Table::newEmptyEntity()已添加以创建一个新的空实体对象。这不会触发任何字段验证。实体可以持久保存而没有验证错误,作为空记录。

CakeORMRulesChecker::isLinkedTo()和isNotLinkedTo()添加。这些新的应用程序规则使您可以确保关联具有或不具有相关记录。

DateTimeFractionalType为期时间类型添加了一个新的类型类,精度为微秒。您可以通过将其添加TypeFactory为默认datetime类型或重新映各个列来选择使用此类型。有关如何将这种类型自动映到数据库类型,请参见数据库迁移说明。

DateTimeTimezoneType已为具有时区支持的期时间类型添加了新的类型类。您可以通过将其添加TypeFactory为默认datetime类型或重新映各个列来选择使用此类型。

CakePHP软件特色

控制台命令

除Web框架外,CakePHP还提供用于创建命令行工具和应用程序的控制台框架。控制台应用程序是处理利用现有应用程序配置,模型,插件和域逻辑的各种后台和任务的理想选择。

CakePHP提供了多个控制台工具,可与CakePHP功能(例如i18n)和路由进行交互,从而使您能够自省应用程序并生成相关文件。

CakePHP控制台

CakePHP控制台使用调度程序类型的系统来加载命令,解析其参数并调用正确的命令。虽然下面的示例使用bash,但CakePHP控制台与任何* nix shell和Windows兼容。

调试

调试是任何开发周期中不可避免的必要部分。虽然CakePHP不提供直接与任何IDE或编辑器直接连接的任何工具,但CakePHP确实提供了一些工具来帮助调试和公开应用程序内部正在运行的内容。

CakePHP教程

使用 CakePHP

快取

类 CakeCacheCache

通过在更快或更近的存储系统中所需数据的第二个副本,缓存可用于使从昂贵或慢速资源的读取更快。例如,您可以在缓存中存储昂贵查询的结果或不经常更改的远程Web服务访问。一旦进入缓存,从缓存中读取数据比访问远程资源便宜得多。

Cache该类简化了CakePHP的缓存。此类提供了静态接口和统一的API,可与各种缓存实现进行交互。CakePHP提供了多个缓存引擎,并在需要构建自己的后端时提供了一个简单的接口。内置的缓存引擎是:

File文件缓存是使用本地文件的简单缓存。它是最慢的缓存引擎,没有为原子作提供太多功能。但是,由于磁盘存储空间通常很便宜,因此存储大型对象或不经常写入的元素在文件中效果很好。

Memcached使用Memcached 扩展名。

Redis使用phpredis 扩展名。Redis提供了类似于Memcached的快速且持久的缓存系统,还提供了原子作。

ApcuAPCu缓存使用PHP APCu扩展名。该扩展使用Web上的共享内存来存储对象。这使其速度非常快,并且能够提供原子读/写功能。

WincacheWincache使用Wincache 扩展。Wincache在功能和能上类似于APC,但针对Windows和IIS进行了优化。

Array将所有数据存储在一个数组中。该引擎不提供持久存储,旨在用于应用程序测试套件。

Null 空引擎实际上不会存储任何内容,并且会使所有读取作失败。

无论您选择使用哪种CacheEngine,您的应用程序都与交互 CakeCacheCache。

配置缓存引擎

静态CakeCacheCache::setConfig($ key,$ config = null )

您的应用程序可以在其引导过程中配置任意数量的“引擎”。缓存引擎配置在config / app.php中定义。

为了获得最佳能,CakePHP需要定义两个缓存引擎。

_cake_core_用于存储文件映以及国际化和本地化文件的解析结果 。

_cake_model_,用于存储应用程序模型的模式描述。

使用多个引擎配置还可以使您根据需要增量地更改存储。例如,在您的config / app.php中,您可以输入以下内容:

配置选项也可以作为DSN字符串提供。在使用环境变量或PaaS提供程序时,这很有用:

使用DSN字符串时,可以将任何其他参数/选项定义为查询字符串参数。

您还可以在运行时配置缓存引擎:

这些发动机构造的名称(“短”和“长”)被用作$config 参数CakeCacheCache::wte()和 CakeCacheCache::read()。在配置缓存引擎时,可以使用以下语法来引用类名称:

使用FileEngine时,您可能需要使用该mask选项来确保使用正确的权限制作高速缓存文件。

引擎选项

每个引擎都接受以下选项:

duration指定此缓存配置中的项目持续多长时间。指定为strtotime()兼容表达式。

gups与此存储在此配置中的每个键相关联的组或“标签”列表。当您需要从缓存中删除数据的子集时很有用。

prefix在所有条目之前。适用于需要与另一个缓存配置或另一个应用程序共享密钥空间的情况。

pbability命中缓存gc清理的可能。设置为0将禁止 Cache::gc()自动调用。

FileEngine选项

FileEngine使用以下特定于引擎的选项:

isWindows 自动使用主机是否为Windows填充

lock 在写入文件之前应该将文件锁定吗?

mask 用于创建文件的掩码

path缓存文件应保存到的路径。默认为系统的临时目录。

RedisEngine选项

RedisEngine使用以下特定于引擎的选项:

port Redis正在运行的端口。

host Redis正在运行的主机。

database 用于连接的数据库号。

password Redis密码。

persistent 是否应与Redis建立持久连接。

timeout Redis的连接超时。

unix_socket Redist的unix套接字的路径。

MemcacheEngine选项

compress 是否压缩数据。

username 登录以访问Memcache。

password 访问Memcache的密码。

persistent持久连接的名称。使用相同持久值的所有配置将共享一个基连接。

sealize用于序列化数据的串行器引擎。可用的引擎是php,igbinary和json。除了php,必须使用适当的序列化程序支持来编译memcached扩展。

sMemcached的字符串或数组。如果是阵列,MemcacheEngine会将它们用作池。

optionsmemcached客户端的其他选项。应该是option => value的数组。使用Memcached::OPT_*常量作为键。

配置缓存回退

如果引擎不可用,例如FileEngine尝试写入不可写的文件夹或RedisEngine无法连接到Redis,则引擎将退回到noopNullEngine并触发可记录的错误。这样可以防止应用程序由于缓存故障而引发未捕获的异常。

您可以使用fallback配置密钥将缓存配置配置为回退到指定配置:

如果Redis意外失败,则写入redis缓存配置将退回到写入deflt缓存配置。如果在这种情况下写入deflt缓存配置也失败,则引擎将再次回退到NullEngine并阻止应用程序引发未捕获的异常。

您可以使用以下命令关闭缓存后备false:

如果没有后备缓存,则会将失败作为例外引发。

删除配置的缓存引擎

静态CakeCacheCache::dp($ key )

创建配置后,您将无法更改它。相反,您应该删除配置并使用CakeCacheCache::dp()和 重新创建它CakeCacheCache::setConfig()。删除缓存引擎将删除配置并适配器(如果已构建)。

写入缓存

静态CakeCacheCache::wte($ key,$ value,$ config =’deflt’ )

Cache::wte()会将$ value写入缓存。您可以稍后通过引用来读取或删除该值$key。您也可以指定一个可选配置来存储缓存。如果未$config指定,将使用默认值。Cache::wte() 可以存储任何类型的对象,并且是存储模型查找结果的理想选择:

使用Cache::wte()和Cache::read()减少访问数据库以获取帖子的次数。

如果您计划缓存使用CakePHP ORM进行的查询的结果,则最好使用Query Object的内置缓存功能,如“缓存加载的结果”部分所述。

一次写入多个键

静态CakeCacheCache::wteMany($ data,$ config =’deflt’ )

您可能会发现自己需要一次写入多个缓存键。尽管您可以对进行多次调用wte(),但wteMany()允许CakePHP在可用的情况下使用更有效的存储API。例如wteMany() ,使用Memcached时使用保存多个网络连接:

读取缓存

静态CakeCacheCache::remember($ key,$ callable,$ config =’deflt’ )¶

缓存使读取缓存变得容易。如果指定的缓存键存在,则将其返回。如果键不存在,则将调用可调用对象,并将结果存储在提供的键处的缓存中。

例如,您经常要缓存远程服务调用结果。您可以使用 remember()以下简单方法:

从缓存读取

静态CakeCacheCache::read($ key,$ config =’deflt’ )

Cache::read()用于读取下存储的缓存的值 $key从所述$config。如果$config为null,将使用默认配置。Cache::read()如果是有效的缓存,或者null缓存已过期或不存在,则将返回缓存的值。使用严格的比较运算符===或!== 作是否成功Cache::read()。

例如:

或者,如果您使用另一个名为的缓存配置short,则可以在中进行指定,Cache::read()并按Cache::wte()如下所示进行调用:

上一篇 2022-11-28

相关推荐

  • CakePHP

    CakePHP提供web开发功能,可以在软件上快速设计新的应用程序,软件提供代码生成功能,可以快速构建新的应用程序原型,提供引导功能,添加数据库、配置HTTP、验证身份、翻译、...
正在提交中,请稍等片刻...

发表回复

请登录后评论...
登录后才能评论

评论列表 (0条)