我試圖驗證cakePHP 3(3.3.13)中的日期。我收到的數據採用帶時區的ISO 8601格式,如2017-02-17T23:00:00.000Z。CakePHP 3日期時間驗證Iso 8601及時區
我有一個簡單的$validator->date()
規則,總是無法驗證日期。我嘗試使用我自己的驗證提供程序,其中我使用提供的值構建Chronos對象。由於Chronos的是使用DateTimeInterface驗證succeds,但是我收到一個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');`
我一直認爲,一個DateTime字段會修補patchEntity()中的Chronos/DateTime對象。我錯了嗎?有沒有最佳實踐? 我沒有以任何方式修改bootstrap.php關於日期格式。謝謝!
認罪se總是提到你正在使用的確切的CakePHP版本,事情現在會改變。同時請顯示引導程序中的實際內容,同樣,事情會隨着時間而改變,特別是應用程序模板的默認日期/時間配置已更改了很多次。 – ndm
我的蛋糕版本是3.3.13。 bootstrap.php沒有被修改。 – Seb
此外,應用程序模板引導程序隨着時間的推移已經發生變化,因此表示您沒有修改它,並沒有真正的幫助,因爲沒有人能夠知道您使用的是哪個版本(應用程序模板和CakePHP框架是兩個不同的存儲庫)。 – ndm