вторник, 6 октября 2009 г.

Readonly fields in symfony

Иногда бывает необходимо просто отобразить поле в форме без возможности его изменения. Обычно это актуально для автогенерируемых полей, таких как created_at и updated_at. Проблема в том, что поля типа datetime отображаются в виде набора селектов (sfWidgetFormSelect) и простое навешивание атрибута readonly не поможет:
$this->widgetSchema['created_at']->setAttribute('readonly', 'readonly');
Наиболее простым выходом из ситуации будет замена виджета sfWidgetFormDateTime на sfWidgetFormInput:
public function configure()
{
  // ...
  $this->widgetSchema['created_at'] = new sfWidgetFormInput(array(), array('readonly'=>'readonly'));
  // ...
}

Если по каким-либо причинам понадобилось вместо поля ввода (input) отображать просто текст, то можно создать виджет myWidgetFormPlain
class myWidgetFormPlain extends sfWidgetForm
{
  
  protected function configure($options = array(), $attributes = array()) { }

  public function render($name, $value = null, $attributes = array(), $errors = array())
  {
    return $value ? $value : '—';
  }

}
При использовании этого виджета необходимо отключить валидатор:
public function configure()
{
  // ...
  $this->widgetSchema['created_at'] = new myWidgetFormPlain();
  unset($this->validatorSchema['created_at']);
  // ...
}

Комментариев нет:

Отправить комментарий