gpt4 book ai didi

php - 无法在 CakePHP 应用程序中存储 01/01/1600 之前的日期

转载 作者:可可西里 更新时间:2023-11-01 07:21:59 27 4
gpt4 key购买 nike

我有一个非常简单的表格。

Evenementshistoriques table

我用

生成了文件
bin\cake bake all [tableName]

我现在有一个可以添加/编辑/删除条目的表单。

Form

问题是,如果我输入 1600 年 1 月 1 日之前的日期,我会收到一条错误消息,指出该日期无效。

Error

我假设错误来自验证器。

验证规则如下:

 /**
* Default validation rules.
*
* @param \Cake\Validation\Validator $validator Validator instance.
* @return \Cake\Validation\Validator
*/
public function validationDefault(Validator $validator)
{
$validator
->integer('id')
->allowEmpty('id', 'create');

$validator
->date('debut_date')
->allowEmpty('debut_date');

$validator
->date('fin_date')
->allowEmpty('fin_date');

$validator
->allowEmpty('nom');

$validator
->allowEmpty('description');

return $validator;
}

我不明白为什么会出现这个错误。你能帮帮我吗?

谢谢

最佳答案

验证不支持

看起来验证根​​本不允许 1600 之前的年份。

1[6-9]|[2-9]

https://github.com/cakephp/cakephp/blob/3.2.10/src/Validation/Validation.php#L404

我不确定这背后的原因,也许是为了应对某些 DBMS 的存储限制,例如 SQL Servers 1/1/1753 minimum:

What is the significance of 1/1/1753 in SQL Server?

考虑替代存储类型,甚至不同的 DBMS

鉴于您要存储 1000 之前的年份,值得一提的是,MySQL 的 DATE 类型是 supported range1000-01-01 开始(正如@user221931 在评论中提到的)。虽然在 1000 之前的几年似乎有非官方支持(即 0861-07-03 实际上可以存储和使用),但这可能不是您想要的依靠。

可能的解决方案在这里有点离题,并且已经在 SO 上讨论过了,比如

Does MySQL support historical date (like 1200)?

您可以使用自定义正则表达式

无论这是否应该在核心中进行更改,无论如何您都可以提供自己的正则表达式以供日期验证使用,以便接受您需要的几乎任何日期,但是您需要使用 add() 作为 date() 不支持自定义正则表达式(可能值得改进),例如

->add('fin_date', [
'rule' => ['date', null, '\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])']
])

该检查可能过于宽松,但您应该明白这一点。

您可能要开工单over at GitHub或访问 IRCSlack并要求核心团队澄清。我个人认为开箱即用地支持未过时/受限的 DBMS(假设这实际上是该行为的原因)是值得改进的。

关于php - 无法在 CakePHP 应用程序中存储 01/01/1600 之前的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37896735/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com