Как мне получить данные, измененные с помощью beforeValidate? - PullRequest
1 голос
/ 07 декабря 2010

У меня есть поле, которое я изменяю перед проверкой, убирая пробелы и заглавные буквы, как это.

    function beforeValidate(){
    $this->data['Oligo']['sequence'] = str_replace(' ', '', $this->data['Oligo']['sequence']);
    $this->data['Oligo']['sequence'] = strtoupper($this->data['Oligo']['sequence']);
}

Если проверка не пройдена, форма отображается с исходными данными, а не с измененными. Почему это?

Я бы хотел, чтобы в форме были вместо этого измененные данные. Должен ли я сделать это в контроллере?

1 Ответ

2 голосов
/ 07 декабря 2010

Поведение, которое вы видите, происходит потому, что в beforeValidate вы изменяете значения в элементе Model::data, тогда как то, что отображается в вашей форме, находится в элементе Controller::data, а Model::data никогда не получаетотправлено обратно на контроллер.

Вам нужно будет выполнить массаж данных с контроллера.Например, вы можете преобразовать операции, выполняемые в beforeValidate, в открытый метод massageData, который вы вызываете ранее в контроллере перед этапом сохранения / проверки.

В вашей модели:

class Oligo extends AppModel
{
  // stuff

  function massageData($data){
    $data['Oligo']['sequence'] = str_replace(' ', '', $data['Oligo']['sequence']);
    $data['Oligo']['sequence'] = strtoupper($data['Oligo']['sequence']);

    return $data;
  }

  // other stuff
}

В вашем контроллере:

class OligosController extends AppController
{
  // stuff

  function add()
  {
    if ($this->data) {
      $this->data = $this->Oligo->massageData($this->data);

      if ($this->Oligo->save($this->data)) {
        // post-save logic
      } else {
        // error handling
      }
    }
    // view context preparation
  }

  // other stuff
}

HTH.

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