Как получить значение поля «Мобильный номер» в моем контроллере CakePHp - PullRequest
0 голосов
/ 16 июля 2009

Я создал поля ввода на странице просмотра, как

    <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

Но только для моего поля «Номер мобильного телефона» я получаю значение последнего идентификатора, например 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 - это имя поля, а $ value - это мое значение поля. Только для поля номера телефона значения являются массивом, а во всех остальных случаях это только одно значение.

1 Ответ

2 голосов
/ 16 июля 2009

Если вы используете 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->data является центральным для правильной работы форм. НЕ ПРИКАСАЙТЕСЬ к $ _POST! Используйте методы Cake для создания форм и используйте те же имена для полей, что и в базе данных. Это облегчает торт "автоматики". Вы не собираете вручную массив для передачи в базу данных, вы используете одни и те же имена для всего от начала до конца и просто передаете массив. $this->data будет автоматически возвращаться из контроллера в представление (т. Е. В форму), если вы используете Cake FormHelper поля будут автоматически заполняться из него.

Вы должны свести к минимуму работу, которую вы должны сделать между отправкой формы и сохранением данных. В идеале ваш контроллер выглядит только так:

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

Это весь код, который вам нужен, и он будет

  • отобразить страницу
  • обрабатывать отправку форм
  • подтвердить ввод
  • заполнить поля формы обратно, если проверка не удалась
  • сохранить данные, если проверка прошла успешно
  • перенаправить на следующий шаг, если данные были успешно сохранены

Если поля формы не соответствуют полям базы данных 1: 1, измените только те биты, которые вам нужны, от if(!empty($this->data)) до $this->Model->save($this->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'));
    }
}

Если вы хотите проверить отправленные данные формы для полноты, вы только заполняете соответствующие правила в Модели . Каждый раз, когда вы выдаете $this->Model->save(), модель автоматически проверяет правила перед сохранением и return false, если они не выполняются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...