【问题标题】:CodeIgniter HTML 5 Input Type IssueCodeIgniter HTML 5 输入类型问题
【发布时间】:2017-04-17 01:43:54
【问题描述】:

我是编程初学者,尤其是使用 CodeIgniter 框架。我有一个问题,也许你们可以帮助我。

这里是代码

<div class="form-group">
    <?php
        echo form_label('Email', 'email');
        echo form_input('email', '', [
            'type'  => 'email',
            'id'    => 'email', 
            'class' => 'form-control'
        ]);
    ?>
</div>

当我在浏览器中检查时,它显示如下

<input type="text" name="email" value="" id="email" class="form-control">

但是当我把代码改成这个时

<div class="form-group">
    <?php
        echo form_label('Email', 'email');
        echo form_input([
            'type'  => 'email',
            'name'  => 'email',
            'id'    => 'email', 
            'class' => 'form-control'
        ]);
    ?>
</div>

检查元素显示

<input type="email" name="email" value="" id="email" class="form-control">

我想知道,为什么我的第一个代码不能使用&lt;input type="email"&gt;? 任何解释都会对我有所帮助,谢谢。

【问题讨论】:

    标签: php html forms codeigniter


    【解决方案1】:

    我通过编辑 system>helpers 下的 form_helper.php 解决了这个问题,并像这样添加了一个名为 form_input_email() 的新函数;

    if ( ! function_exists('form_input_email'))
    {
        /**
         * Email Input Field
         *
         * @param   mixed
         * @param   string
         * @param   mixed
         * @return  string
         */
        function form_input_email($data = '', $value = '', $extra = '')
        {
            $defaults = array(
                'type' => 'email',
                'name' => is_array($data) ? '' : $data,
                'value' => $value
            );
    
            return '<input '._parse_form_attributes($data, $defaults)._attributes_to_string($extra)." />\n";
        }
    }
    

    【讨论】:

      【解决方案2】:

      当您查看form_helper 文件时,下面是form_input 的函数。在这里,您可以看到默认情况下未传递数组数据时,它需要 $defaults 数组,因此您不会在第一个代码中输入 email 。查看下面的form_input 代码。 More Details

      if ( ! function_exists('form_input'))
      {
          /**
           * Text Input Field
           *
           * @param   mixed
           * @param   string
           * @param   mixed
           * @return  string
           */
          function form_input($data = '', $value = '', $extra = '')
          {
              $defaults = array(
                  'type' => 'text',
                  'name' => is_array($data) ? '' : $data,
                  'value' => $value
              );
              return '<input '._parse_form_attributes($data, $defaults)._attributes_to_string($extra)." />\n";
          }
      }
      

      【讨论】:

      • 谢谢伙计,非常有帮助,让我了解 form_input 的工作原理。
      【解决方案3】:

      对于第一个例子,通过输入所有参数作为值,它将默认为文本输入,假设第一个参数为名称,第二个参数为,第三个参数作为额外信息

      对于第二个示例,您在数组中很好地定义了它们,从而产生了您想要的结果。

      【讨论】:

        【解决方案4】:

        我认为是 CodeIgniter 框架的 form_input 的行为。

        对于 form_input(a,b,c)form_input(a,b) 方法,c 是额外的参数对象,它是可选的。 他们只能为您创建一个文本字段,无论extraParams中指定的任何类型。

        但是,正如您提到的,您仍然可以通过应用重载的 form_input 来创建 type=email 输入,即 form_input(extraParameters)

        我认为这两个在CodeIgniter中的实现并不相同,接受数组的那个是主函数,因此它为您提供了更多的可行性。

        例如,您可以使用第二个代码创建与第一个代码相同的输出。但你不能反过来做。

        <div class="form-group">
            <?php
                echo form_label('Email', 'email');
                echo form_input([
                    'type'  => 'text',
                    'name'  => 'email',
                    'value'  => '',
                    'id'    => 'email', 
                    'class' => 'form-control'
                ]);
            ?>
        </div>
        

        https://www.codeigniter.com/userguide3/helpers/form_helper.html

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-21
          • 2010-11-21
          • 1970-01-01
          • 2011-04-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多