Я использую помощник, библиотеку или помещаю свой код выбора даты в модель в 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)
Другие вопросы по тегам