簡體   English   中英

我是否使用助手,庫或將日期選擇器代碼放置在codeigniter中的模型中?

[英]Do I use a helper, library or place my datepicker code in a model in 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”是否更好,將代碼放入其中並將其加載到控制器中。

這是最好的方法嗎?

如果可以的話,有人可以給我一個如何做到這一點的例子嗎? 如果還有其他方法可以請別人告訴我?

在此先感謝..我在這里學習..

許多開發人員(包括我本人在內)已經開發了自己的代碼版本。 我想在這里指出兩個問題。

首先,您在這里使自己陷入一種虛假的安全感。 有界的選擇元素不能也不保證每個請求都包含一個有效日期。 永遠不要相信輸入。 始終驗證。 用您自己的日期驗證功能擴展Form_validation類。

其次,讓用戶下拉三個下拉菜單(沒有減輕所有請求中的有效日期的保證)是非常糟糕的UX,尤其是在用戶需要填充多個日期(開始日期/結束日期,里程碑日期等)的情況下。

在理解了這兩件事之后,我將其重構到我的網站之外。 現在,我的日期字段是輸入類型的文本,帶有指定日期期望格式的標簽。 我的Form_validation類已擴展為驗證日期字段。 而且我在表單中添加了一個真正的日期選擇器

助手似乎聽起來最適合此操作。 為此,請查看文檔和此SO問題

在一個旁注中,我對可以在多個框架,應用程序或位置中使用的此類通用代碼進行的操作如下:

  • 有一個完全獨立的php文件,例如My_Utils.php
  • 在充滿靜態功能的地方創建一個類(如果> = PHP 5.3,則使用命名空間)
  • 您這樣做是為了確保您的函數未在任何框架/其他代碼的其他地方定義
  • 在任何CodeIgniter初始化/路由之前將其包含在CodeIgniter的index.php中
  • 這樣,它們在所有代碼庫中都可用(控制器,視圖)
  • 根據需要使用它們
  • 將其保存在每個Web服務器的中央位置,以進行維護並易於包含

在這種情況下,您的form_dropdown將只是上述文件中的靜態函數:

class My_Utils {

    public static function form_dropdown($param1, $param2) {

    }

}

您將使用它:

echo My_Utils::form_dropdown('days',$days)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM