【问题标题】:How to retrieve the Mobile Number field value in my CakePHp controller如何在我的 CakePHP 控制器中检索手机号码字段值
【发布时间】:2009-07-16 14:36:32
【问题描述】:

我在查看页面中创建了一个输入字段,例如

    <div class="input text">
      <label for="2">First Name (required) </label>
      <input type="text" value="" style="width: 300px;" id="2" class="required" name="First Name"/>
     </div>

  <div class="input text">
   <label for="5">Emailid</label>
   <input type="text" value="" style="width: 300px;" id="5" name="Emailid"/><
 /div>
<div class="input text">
<label for="6">Mobile Number</label>
<input type="text" value="" style="width: 30px;" id="6" name="Mobile Number"/>
<input type="text" value="" style="width: 30px;" id="6-1" name="Mobile Number"/>
<input type="text" value="" style="width: 70px;" id="6-2" name="Mobile Number"/>
</div>

这些都是在页面中生成的。我正在使用 CakePHp 控制器从该页面中检索内容值

 foreach ($_POST as $key => $value):
    echo $key;echo $value;
 endforeach;

对于上述所有领域,我得到了正确的答案,例如 First_Name=A&Emailid=aruna@tcs.com&Mobile_Number=3

但是对于我的手机号码字段,我得到了最后一个 id 的值,例如 6-2。为什么会这样。?如何检索三个字段(6,6-1,6-2)中给出的手机号码的完整值?请建议我。

编辑:

     foreach ($_POST as $key => $value):
     $mobile_number = implode('', $_POST['number']); 
   echo $mobile_number;
    $this->data['Result']['form_id']=$formid; 
    $this->data['Result']['label']=Inflector::humanize($key); 
     $this->data['Result']['value']=$value; 
   $this->Form->submitForm($this->data);
    endforeach;

我正在使用上面的方法保存键及其值(即,控制器不知道填充页面中的所有字段是什么)。填充页可能/可能不包含电话号码字段。我如何确保页面具有电话号码字段并使用其键保存其值。

注意:$key 是 Fieldname,$value 是我的 field 值。只有 Phonenumber 字段的值是数组,在所有其他情况下它只是一个值。

【问题讨论】:

  • 首先,您应该使用 Cake 方法来创建表单,并使用 Cake $this-&gt;data 变量来处理结果。到目前为止,这段代码没有任何内容。

标签: php html cakephp


【解决方案1】:

如果你在使用 Cake,你真的应该在学习和使用 Cake。

简要介绍一下 Cake 中的流程:

Form page -> Submit
    ^           |
    |           v
    |        Controller // Form data is in $this->data
    |           |
    |           v
    |        $this->Model->save($this->data); -> Model
    |                                              |
    |                                              v
    -------- Controller <----------------------- Data validation
                             validation no good    |
                                                   | validation okay
                                                   v
             Controller <----------------------- Actually save data
                 |
                 v
          Go somewhere else

这对你意味着什么:

$this-&gt;data 是表单正常工作的核心。 请勿触摸 $_POST! 使用 Cake methods for creating Forms 并为数据库中使用的字段使用相同的名称。这促进了很多蛋糕的“自动”。您无需手动组装数组以传递给数据库,而是从头到尾使用相同的名称,然后将数组传递给周围。 $this-&gt;data 将自动从 Controller 传递回 View(即 Form),如果您使用 Cake FormHelper,字段将自动从它填回。

您应该尽量减少提交表单和保存数据之间的工作量。理想情况下,您的控制器应该是这样的:

if (!empty($this->data)) {
    if ($this->Model->save($this->data)) {
        $this->redirect(array('action' => 'next_step'));
    }
}

这就是你需要的所有代码,它会

  • 显示页面
  • 处理表单提交
  • 验证输入
  • 如果验证失败,请重新填写表单字段
  • 如果验证成功则保存数据
  • 如果数据保存成功,则重定向到下一步

如果您的表单字段与您的数据库字段不是 1:1 对应,请仅在 if(!empty($this-&gt;data))$this-&gt;Model-&gt;save($this-&gt;data) 之间调整您需要的位:

if (!empty($this->data)) {
    $this->data['Model']['mobile_number'] = implode('-', $this->data['Model']['mobile_number']);
    if ($this->Model->save($this->data)) {
        $this->redirect(array('action' => 'next_step'));
    }
}

如果您想验证提交的表单数据的完整性,您只需fill in the appropriate rules in the Model。每当您发出$this-&gt;Model-&gt;save() 时,模型会在保存前自动检查规则,如果不符合则return false

【讨论】:

  • 其实我在我的其他功能中做同样的事情。但是在这个提交动作中,控制器不会知道字段名可能是什么,就像你所说的 mobile_number 一样。仅为此,我使用 $_POST 之类的 foreach ($_POST as $key => $value): if(is_array($value)){ $value = implode('', $_POST[$key]); $this->data['Result']['value']=$value; }else{ $this->data['Result']['value']=$value; } $this->data['Result']['form_id']=$formid; $this->data['Result']['label']=Inflector::humanize($key); $this->Form->submitForm($this->data); endforeach;
  • 不要使用 $_POST! 是的,你可以,因为 CakePHP 中还有 PHP,但是你真的没有使用 Cake。要么按照蛋糕的方式去做,要么根本不使用蛋糕。如果你做一个另一个你可能不会有这个问题。还有,$this-&gt;Form-&gt;submitForm($this-&gt;data) 是做什么的?
  • $this->Form->submitForm($this->data) 将我所有的控制器设置发送到将条目保存在数据库中的模型。
  • 我会检查是否可以用简单的$this-&gt;Model-&gt;save($this-&gt;data) 替换。如果绝对必要,在模型中创建一个beforeSave() 钩子。无论哪种方式,我肯定会重命名该函数。表单已经提交,这个函数名很尴尬。
猜你喜欢
  • 2011-11-16
  • 2014-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-25
  • 1970-01-01
相关资源
最近更新 更多