1

这是我的代码:

//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”将代码放在那里并将其加载到我的控制器中。

这是最好的方法吗?

如果是这样,有人可以给我一个例子来说明我如何做到这一点吗?如果有另一种方式,有人可以告诉我吗?

提前谢谢..我是来学习的..

4

2 回答 2

1

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

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

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

在我理解了这两件事之后,我从我的网站中重构了它。现在我的日期字段是输入类型文本,带有指定日期预期格式的标签。我的 Form_validation 类已扩展为验证日期字段。而且我在我的表单中添加了一个真正的日期选择器。

于 2010-09-19T15:59:40.663 回答
0

一个助手听起来最适合这个。为此,请查看文档和这个SO question

在旁注中,我对可以在多个框架、应用程序或位置中使用的通用代码执行以下操作:

  • 有一个完全独立的 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)
于 2010-09-18T20:37:54.123 回答