Как в CakePHP создать форму для отображения моделей в диапазоне дат? - PullRequest
0 голосов
/ 14 мая 2010

У меня есть очень простая модель, которая включает автоматически заполненное поле, очень похожее на «созданный». (Формат DateTime).

Я бы хотел использовать помощников формы, если это возможно, для проверки полей даты и тому подобного.

Мне нужна простая форма с «датой начала» (YMD, 12 часов) и «датой окончания» (в том же формате).

Действие контроллера уже настроено следующим образом:

function view_between($start_date = null, $end_date = null) { 
    // ... stuff that works correctly when the URL is manually entered.
}

Я неправильно определил контроллер или как я могу передать эти значения в эту функцию?

Причина, по которой я застрял, заключается в том, что я попытался добавить $form->input('my_datetime_field' ...) дважды, но, очевидно, имя / идентификатор были одинаковыми для соответствующих элементов.

Я также пытался использовать $form->dateTime(...) с похожими результатами.

Я не уверен, как однозначно определить дату начала и окончания, когда она должна взаимодействовать с одним полем.

Я ошибаюсь? Доброго толчка в правильном направлении должно хватить.

Ответы [ 3 ]

1 голос
/ 14 мая 2010

Чтобы указать несколько элементов формы с одним и тем же именем поля, используйте следующий синтаксис:

$form->input('Modelname.0.fieldname');
$form->input('Modelname.1.fieldname');

Который должен вернуть вам массив значений для использования.

От: http://book.cakephp.org/view/547/Field-naming-convention

0 голосов
/ 15 мая 2010

При отправке формы вы можете отправить ее только как запрос GET или POST.
GET-запрос прикрепит все элементы формы к URL в таком формате:

/controller/action?data[Model][field]=value&data[Model][field2]=value

Это не соответствует стандартам Cake URL, поэтому вам придется все равно переписать или проанализировать URL.

POST-запрос заключается в том, что данные в вашем контроллере, как обычно, заканчиваются на $this->data.

В любом случае, вы не можете напрямую передать запрос формы в функцию с параметрами. Вы могли бы использовать Javascript, но я советую вам не делать этого. Лучшее, вероятно, обычный запрос POST. Вам просто нужно переписать действие вашего контроллера, чтобы получить данные из $this->data. Назовите поля формы как хотите, просто убедитесь, что вы правильно используете их в своем действии контроллера.

0 голосов
/ 14 мая 2010

Вы можете сделать отправку, которая формирует запрос на получение, который добавляет даты начала / окончания:

echo $form->create('Foos', array('onsubmit'='submitDates(this)'));

JavaScript:

function submitDates(frm) {
    // grab dates from inputs, form get string and submit to form.action
    // get should be something like /controller/view_between/YYYY-MM-DD/YYYY-MM-DD
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...