【发布时间】:2017-02-06 12:24:27
【问题描述】:
我正在尝试在 cakePHP 3 (3.3.13) 中验证日期。我收到的数据是带有时区的 ISO 8601 格式,例如 2017-02-17T23:00:00.000Z 。
我有一个简单的$validator->date() 规则,它总是无法验证日期。我尝试使用我自己的验证提供程序,在其中我根据提供的值构建了一个 Chronos 对象。由于 Chronos 使用 DateTimeInterface 验证成功,但我收到 SQL 错误:
SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value: '2017-02-17T23:00:00.000Z' for column 'launchdate' at row 1
这是我的 bootstrap.php:
require __DIR__ . '/paths.php';
require ROOT . DS . 'vendor' . DS . 'autoload.php';
require CORE_PATH . 'config' . DS . 'bootstrap.php';
use Cake\Cache\Cache;
use Cake\Console\ConsoleErrorHandler;
use Cake\Core\App;
use Cake\Core\Configure;
use Cake\Core\Configure\Engine\PhpConfig;
use Cake\Core\Plugin;
use Cake\Datasource\ConnectionManager;
use Cake\Error\ErrorHandler;
use Cake\Log\Log;
use Cake\Network\Email\Email;
use Cake\Network\Request;
use Cake\Routing\DispatcherFactory;
use Cake\Utility\Inflector;
use Cake\Utility\Security;
try {
Configure::config('default', new PhpConfig());
Configure::load('app', 'default', false);
} catch (\Exception $e) {
die($e->getMessage() . "\n");
}
if (!Configure::read('debug')) {
Configure::write('Cache._cake_model_.duration', '+1 years');
Configure::write('Cache._cake_core_.duration', '+1 years');
}
date_default_timezone_set('UTC');
mb_internal_encoding(Configure::read('App.encoding'));
ini_set('intl.default_locale', 'en_US');
$isCli = php_sapi_name() === 'cli';
if ($isCli) {
(new ConsoleErrorHandler(Configure::consume('Error')))->register();
} else {
(new ErrorHandler(Configure::consume('Error')))->register();
}
if ($isCli) {
require __DIR__ . '/bootstrap_cli.php';
}
if (!Configure::read('App.fullBaseUrl')) {
$s = null;
if (env('HTTPS')) {
$s = 's';
}
$httpHost = env('HTTP_HOST');
if (isset($httpHost)) {
Configure::write('App.fullBaseUrl', 'http' . $s . '://' . $httpHost);
}
unset($httpHost, $s);
}
Cache::config(Configure::consume('Cache'));
ConnectionManager::config(Configure::consume('Datasources'));
Email::configTransport(Configure::consume('EmailTransport'));
Email::config(Configure::consume('Email'));
Log::config(Configure::consume('Log'));
Security::salt(Configure::consume('Security.salt'));
Log::config('default', [
'engine' => 'Syslog'
]);
Request::addDetector('mobile', function ($request) {
$detector = new \Detection\MobileDetect();
return $detector->isMobile();
});
Request::addDetector('tablet', function ($request) {
$detector = new \Detection\MobileDetect();
return $detector->isTablet();
});
Plugin::load('Muffin/Footprint');
if (Configure::read('debug')) {
Plugin::load('DebugKit', ['bootstrap' => true]);
}
DispatcherFactory::add('Asset');
DispatcherFactory::add('Routing');
DispatcherFactory::add('ControllerFactory');`
我一直认为,日期时间字段将被修补到 patchEntity() 中的 Chronos / DateTime 对象。我在这里错了吗?有没有最佳实践? 关于日期格式,我没有以任何方式修改 bootstrap.php。谢谢!
【问题讨论】:
-
请务必提及您正在使用的确切 CakePHP 版本,情况时不时会发生变化。另外请显示您的引导程序中的实际内容,同样,随着时间的推移,事情确实会发生变化,尤其是应用程序模板的默认日期/时间配置已经更改了很多次。
-
我的蛋糕版本是 3.3.13 。 bootstrap.php 没有被修改。
-
再一次,应用模板引导程序已经随着时间的推移而改变,所以说你没有修改它并没有真正的帮助,因为没有人知道你使用的是什么版本(应用模板和 CakePHP 框架是两个不同的存储库)。
-
哦,对不起,我的项目不是用 cakePHP 框架应用程序项目构建的。
标签: validation datetime cakephp