Я использую помощник, библиотеку или помещаю свой код выбора даты в модель в codeigniter? - PullRequest
1 голос
/ 18 сентября 2010

Вот мой код:

//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 ]

1 голос
/ 19 сентября 2010

Многие разработчики, включая меня, разработали собственную версию этого кода.Здесь я хочу указать на две проблемы.

Прежде всего, вы привели себя в чувство ложного чувства безопасности здесь.Ограниченные элементы выбора не могут и не гарантируют, что каждый запрос содержит действительную дату.Никогда не доверяйте вводу.Всегда проверяйте.Расширьте класс Form_validation вашими собственными функциями проверки даты.

Во-вторых, заставить пользователя получить три раскрывающихся списка (без гарантии уменьшения допустимой даты во всех запросах) - довольно дурацкий пользовательский интерфейс, особенно в тех случаях, когда пользователю нужнодля заполнения нескольких дат (дата начала / дата окончания, даты вех и т. д.).

После того, как я понял эти две вещи, я рефакторинг это из моего сайта.Теперь мои поля даты являются типом ввода текста с меткой, которая указывает ожидаемый формат даты.Мой класс Form_validation расширен для проверки полей даты.И я добавил к своим формам реальный указатель даты .

0 голосов
/ 19 сентября 2010

Помощник звучит так, как будто для этого лучше всего подойдет. Для этого посмотрите документацию и этот ТАК вопрос

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

  • имеет совершенно отдельный 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...