request parameterからの更新

基本パターン

if ($this->hasRequestParameter('xxx'))
{
  $this->model->setXxx($this->getRequestParameter('xxx'));
}

または

if ($this->getRequestParameter('xxx') !== null)
{
  $this->model->setXxx($this->getRequestParameter('xxx'));
}

※チェックボックスの場合は、チェックボックスを含むフォームを処理するアクションで、以下のようにデフォルトをセットする必要がある。

if (!$this->hasRequestParameter('xxx'))
{
  $this->getRequest()->setParameter('xxx', false);
}

または

if ($this->getRequestParameter('xxx') == null)
{
  $this->getRequest()->setParameter('xxx', false);
}

日付
(input_date_tag, select_day_tag+select_month_tag+select_year_tag)

if ($this->hasRequestParameter('date'))
// または if ($this->getRequestParameter('date') !== null)
{
  if ($this->getRequestParameter('date'))
  {
    try
    {
      $dateFormat = new sfDateFormat($this->getUser()->getCulture());
      if (!is_array($this->getRequestParameter('date')))
      {
        $value = $dateFormat->format($this->getRequestParameter('date'), 'i', $dateFormat->getInputPattern('d'));
      }
      else
      {
        $value_array = $this->getRequestParameter('date');
        if (is_numeric($value_array['year']) && is_numeric($value_array['month']) && is_numeric($value_array['day']))
        {
          $value = $value_array['year'].'-'.$value_array['month'].'-'.$value_array['day'].(isset($value_array['hour']) ? ' '.$value_array['hour'].':'.$value_array['minute'].(isset($value_array['second']) ? ':'.$value_array['second'] : '') : '');
        }
        else
        {
          $value = null;
        }
      }
      $this->model->setDate($value);
    }
    catch (sfException $e)
    {
      // not a date
    }
  }
  else
  {
    $this->model->setDate(null);
  }
}

日付時刻
日付とほぼ同じだが、値をテキストで受け取った場合(rich=true)のフォーマット引数が異なる。

$value = $dateFormat->format($this->getRequestParameter('date'), 'i', $dateFormat->getInputPattern('d'));

日付時刻

$value = $dateFormat->format($this->getRequestParameter('date'), 'I', $dateFormat->getInputPattern('g'));

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください