CakePHP Form Helper и Datetime - PullRequest
       47

CakePHP Form Helper и Datetime

1 голос
/ 11 марта 2011

Я использовал помощник по формам для создания выбора даты и времени, и когда я получаю доступ к $this->data.

Это выглядит следующим образом.

[Timetable] => Array
    (
        [event_id] => 133
        [location_id] => 39
        [start] => Array
            (
                [hour] => 09
                [min] => 06
                [day] => 11
                [month] => 03
                [year] => 2011
            )

    )

Но я хочу, чтобы это выглядело больше так ...

[Timetable] => Array
    (
        [event_id] => 133
        [location_id] => 39
        [start] => 2011-03-11 09:06:00

    )

Есть ли способ преобразовать его в это?

Ответы [ 3 ]

2 голосов
/ 11 марта 2011

Вы можете просто перестроить $this->data['Timetable']['start'] var в вашем контроллере следующим образом:

$this->data['Timetable']['start'] = $this->data['Timetable']['start']['year']
    .'-'.$this->data['Timetable']['start']['month']
    .'-'.$this->data['Timetable']['start']['day']
    .' '.$this->data['Timetable']['start']['hour']
    .':'.$this->data['Timetable']['start']['min'];

Должно работать нормально.

1 голос
/ 11 марта 2011

Это недокументировано в Кулинарной книге, но функция, которую модель использует для преобразования этого массива в дружественный к базе данных формат: Model::deconstruct($field, $data). Вы можете использовать его следующим образом:

$startAsString = $this->Timetable->deconstruct(
    'start', $this->data['Timetable']['start']
);

Преимущество этого решения состоит в том, что он не нарушает абстракцию MVC, так как ваш контроллер знает что-либо о структуре данных, представляемых формой, или о том, как база данных хранит их.

0 голосов
/ 11 марта 2011

Поскольку вы используете помощник по формам для генерации кода, вы не можете поместить его в один индекс, если не измените помощник по форме.

Вы, вероятно, используете

$this->Form->input('start')

Если вы измените его на приведенное ниже, оно получится так, как вы хотите.

$this->Form->input('start', array('type'=>'text'));

Однако, если вы сделаете это, вы потеряете все выпадающие списки, которые автоматически генерирует торт.Не проблема, если вы используете DatePicker.

...