'type'=> 'datetime-local' в cakephp 3.6
Я пытаюсь использовать 'type'=> 'datetime-local' в моей форме, чтобы создать выбор времени и даты. В представлении все работает отлично, но CakePHP не может обработать формат результата. Я пытался привести его к Cake\I18n\Time, но он игнорирует установленное время и использует текущее время.
Кто-нибудь использовал сборщик даты html5 в cakephp? Есть ли намерение сделать его стандартным выбором в торте?
Вариант выбора по умолчанию для CakePHP с большим количеством полей выбора не очень удобен.
1 ответ
CakePHP не поддерживает формат, используемый в HTML5 datetime-local input (YYYY-MM-DDTHH:MM
) из коробки (пока).
Вы можете решить эту проблему, например, используя пользовательский / расширенный тип базы данных, который добавляет правильный формат к существующим форматам по умолчанию (это повлияет на все поля / столбцы даты и времени), например:
// in src/Database/Type/DateTimeType.php
namespace App\Database\Type;
class DateTimeType extends \Cake\Database\Type\DateTimeType
{
public function __construct($name = null)
{
$this->_format[] = 'Y-m-d\TH:i'; // date() compatible format
parent::__construct($name);
}
}
// in config/boostrap.php before `Type::build('datetime')` is invoked
Type::map('datetime', \App\Database\Type\DateTimeType::class);
анализируя ввод вручную перед маршалингом:
// in a table class, a behavior, or a listener for the Model.beforeMarshal event
public function beforeMarshal(\Cake\Event\Event $event, \ArrayObject $data, \ArrayObject $options)
{
if (isset($data['fieldName']) &&
is_string($data['fieldName'])
) {
$data['fieldName'] = \Cake\I18n\Time::parseDateTime(
$data['fieldName'],
"yyyy-MM-dd'T'HH:mm" // ICU compatible format
);
}
}
или путем включения локализованного анализа и предоставления соответствующего формата (это ограничит все поля / столбцы даты и времени этим одним форматом):
// in config/bootstrap.php
Type::build('datetime')
->useImmutable()
->useLocaleParser()
->setLocaleFormat("yyyy-MM-dd'T'HH:mm"); // ICU compatible format
Смотрите также
- Кулинарная книга> Доступ к базе данных и ORM > Основы работы с базами данных> Добавление пользовательских типов
- Кулинарная книга> Доступ к базе данных и ORM > Сохранение данных> Изменение данных запроса перед созданием объектов
- Кулинарная книга> Интернационализация и локализация> Разбор локализованных данных даты и времени
- Кулинарная книга> Дата и время> Форматирование> Торт \I18n\Time::i18nFormat()