Я использую помощник, библиотеку или помещаю свой код выбора даты в модель в codeigniter?
Вот мой код:
//Setup days
$data['days']['FALSE'] = 'Day';
//Setup months
$data['months'] = array('FALSE' => 'Month',
'1' => 'Jan',
'2' => 'Feb',
'3' => 'Mar',
'4' => 'Apr',
'5' => 'May',
'6' => 'Jun',
'7' => 'Jul',
'8' => 'Aug',
'9' => 'Sep',
'10' => 'Oct',
'11' => 'Nov',
'12' => 'Dec'
);
for($i=1;$i<=31;$i++){
$data['days'][$i] = $i;
}
//Setup years
$start_year = date("Y",mktime(0,0,0,date("m"),date("d"),date("Y")-100)); //Adjust 100 to however many year back you want
$data['years']['FALSE'] = 'Year';
for ($i=$start_year;$i<=date("Y");++$i) {
$data['years'][$i] = $i;
}
и вот мое заявление if:
if($this->form_validation->run()){
$month = $this->input->post('months');
$day = $this->input->post('days');
$year = $this->input->post('years');
$birthday = date("m-d-Y H:i:s",mktime(0,0,0,$month,$day,$year));
}
вот мой соответствующий код в моей форме в представлении:
<p>
<label for="birthday">Birthday: </label>
<?php echo form_dropdown('days',$days). " " . form_dropdown('months',$months). " " . form_dropdown('years',$years); ?>
</p>
Когда я помещаю код DatePicker прямо в мой контроллер, выпадающий список в моей форме отображается правильно. Я хотел быть аккуратным с моим кодированием, поэтому решил создать модель и попытался сделать вызовы из моего контроллера, но я получаю неопределенную ошибку переменной несколько раз, когда мое представление пытается отобразить форму.
Я провел некоторое исследование и подумал, лучше ли сделать мой DatePicker помощником "datepicker_helper.php", чтобы поместить туда код и загрузить его в мой контроллер.
Это лучший способ сделать это?
Если да, может ли кто-нибудь дать мне пример того, как я могу это сделать? Если есть другой способ, может кто-нибудь показать мне, пожалуйста?
Заранее спасибо.. Я здесь, чтобы учиться..
2 ответа
Многие разработчики, в том числе и я, разработали собственную версию этого кода. Здесь я хочу отметить две проблемы.
Прежде всего, вы утаили себя в ложное чувство безопасности здесь. Ограниченные элементы выбора не могут и не гарантируют, что каждый запрос содержит действительную дату. Никогда не доверяйте вводу. Всегда проверяйте. Расширьте класс Form_validation своими собственными функциями проверки даты.
Во-вторых, создание пользователем трех выпадающих списков (без гарантии снижения допустимой даты во всех запросах) является довольно дурацким UX, особенно в тех случаях, когда пользователю необходимо заполнить несколько дат (дата начала / дата окончания, даты вехи и т. Д.).
После того, как я понял эти две вещи, я перефразировал это с моего сайта. Теперь мои поля даты являются типом ввода текста с меткой, которая указывает ожидаемый формат даты. Мой класс Form_validation расширен для проверки полей даты. И я добавил настоящую дату в мои формы.
Помощник звучит так, как будто для этого лучше всего подойдет. Для этого посмотрите документацию и этот ТАК вопрос
Что касается описания, то, что я делаю с таким универсальным кодом, который может использоваться в более чем одном фреймворке, приложении или местоположении, заключается в следующем:
- есть совершенно отдельный php-файл, скажем, My_Utils.php
- создайте там класс, полный статических функций (или используйте пространства имен, если>= PHP 5.3)
- вы делаете это, чтобы убедиться, что ваши функции не определены в другом месте в любом фреймворке / другом коде
- включите это в index.php вашего CodeIgniter перед любой инициализацией / маршрутизацией CodeIgniter
- таким образом, они доступны по всей его кодовой базе (контроллеры, представления)
- используйте их по мере необходимости
- храните его в центральном месте на каждом веб-сервере для удобства обслуживания и легкого включения
В этом случае ваш form_dropdown
будет просто статической функцией в указанном файле:
class My_Utils {
public static function form_dropdown($param1, $param2) {
}
}
И вы бы использовали это:
echo My_Utils::form_dropdown('days',$days)