Я пытаюсь проверить дату в cakePHP 3 (3.3.13). Данные, которые я получаю, находятся в формате ISO 8601 с часовым поясом, например, 2017-02-17T23: 00: 00.000Z.CakePHP 3 DateTime Validation Iso 8601 с часовым поясом
У меня есть правило $validator->date()
, которое всегда не подтверждает дату. Я попытался использовать свой собственный поставщик валидации, в котором я создаю объект 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');`
Я всегда думал, что поле даты и времени будет исправлено до объекта Chronos/DateTime в patchEntity(). Я здесь не прав? Есть ли лучшие практики? Я не модифицировал bootstrap.php каким-либо образом относительно форматов даты. Спасибо!
Мольба se всегда упоминает точную версию CakePHP, которую вы используете, вещи меняются сейчас и потом. Также, пожалуйста, покажите, что на самом деле находится в вашем загрузочном блоке, как и все, что-то меняется со временем, особенно в настройках даты и времени по умолчанию шаблонов приложений было изменено несколько раз. – ndm
Моя версия торта - 3.3.13. Bootstrap.php не был изменен. – Seb
Опять же, загрузочный шаблон шаблонов приложений был изменен с течением времени, поэтому, говоря, что вы его не модифицировали, на самом деле не помогает, так как никто не может определить, какую версию вы используете (шаблон приложения и CakePHP рамки - два разных хранилища). – ndm