'type' => 'datetime-local' в cakephp 3.6 - PullRequest
       12

'type' => 'datetime-local' в cakephp 3.6

0 голосов
/ 06 декабря 2018

Я пытаюсь использовать 'type' => 'datetime-local' в моей форме, чтобы создать указатель времени и даты.В представлении все работает отлично, но CakePHP не может обработать формат результата.Я пытался привести его к Cake \ I18n \ Time, но он игнорирует установленное время и использует текущее время.

Кто-нибудь использовал средство выбора даты html5 в cakephp?Есть ли намерение сделать его средством для выбора тортов по умолчанию?

Опция выбора тортов по умолчанию с большим количеством полей выбора не очень удобна.

1 Ответ

0 голосов
/ 06 декабря 2018

CakePHP не поддерживает формат, используемый локальным вводом даты и времени HTML5 (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

См. Также

...