我是否使用帮助器,库或将我的datepicker代码放在codeigniter中的模型中?

时间:2010-09-18 16:05:21

标签: php codeigniter codeigniter-helpers

继承我的代码:

//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_helper.php”将代码放入其中并将其加载到我的控制器中。

这是最好的方法吗?

如果是这样,有人能给我一个如何做到这一点的例子吗?如果还有其他方式可以有人给我看看吗?

提前致谢..我来这里学习..

2 个答案:

答案 0 :(得分:1)

许多开发人员 - 包括我自己 - 已经开发了自己的代码版本。我想在这里指出两个问题。

首先,你已经在这里迷失了一种虚假的安全感。有界选择元素不能也不能保证每个请求都包含有效日期。绝不相信输入。始终验证。使用您自己的日期验证函数扩展Form_validation类。

其次,让用户拉下三个下拉列表(没有在所有请求中有效日期的缓解保证)是非常糟糕的用户体验,尤其是在用户需要填充多个日期(开始日期/结束日期,里程碑日期,等)。

在我理解了这两件事后,我从我的网站中重构了这一点。现在我的日期字段是输入类型文本,带有一个标签,指定日期的预期格式。我的Form_validation类已扩展为验证日期字段。我已将a real datepicker添加到表单中。

答案 1 :(得分:0)

帮助者听起来对此最有效。为此,请查看documentation和此SO question

在旁注中,我对可能在多个框架,应用程序或位置中使用的此类通用代码所做的工作如下:

  • 有一个完全独立的php文件,比如说My_Utils.php
  • 在那里创建一个充满静态函数的类(如果&gt; = 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)