Настройка макета на флажок sfWidgetFormDoctrineChoice отключить

Доброе утро,

В Symfony 1.4,
Я попытался сделать то, что объяснено здесь: Настройка макета для sfWidgetFormDoctrineChoice
Но это не сработает. Вместо добавления эскиза я просто хочу скрыть <li> перед входом, а в некоторых случаях отключить / скрыть ввод флажка, но показать метку в любом случае .
Когда я добавляю рендерер без аргументов, я получаю эту ошибку:
sfWidgetFormMySelectCheckbox requires the following options: 'choices'.

Вот мой код форматирования:

 class sfWidgetFormMySelectCheckbox extends sfWidgetFormSelectCheckbox { public function configure($options = array(), $arguments = array()) { parent::configure($options, $arguments); } protected function formatChoices($name, $value, $choices, $attributes) { ..... // new $inputs[$id] = array( 'input' => sprintf('| test | %s', $this->renderTag('input', array_merge($baseAttributes, $attributes)) ), 'label' => $this->renderContentTag('label', self::escapeOnce($option), array('for' => $id)), ); } return call_user_func($this->getOption('formatter'), $this, $inputs); } } 

И теперь форма, где я это называю:

 $this->setWidget('aaa', new sfWidgetFormDoctrineChoice(array( 'model' => 'Aaa', 'expanded' => true, 'multiple' => true, 'add_empty' => false, 'query' => $query, 'renderer' => new sfWidgetFormMySelectCheckbox() ))); 

Спасибо за вашу помощь !

Согласно документам вы должны передать опцию choices объекту renderer . Попробуйте что-то вроде этого:

 $this->setWidget('aaa', new sfWidgetFormDoctrineChoice(array( 'model' => 'Aaa', 'expanded' => true, 'multiple' => true, 'add_empty' => false, 'query' => $query, ))); $this->widgetSchema['aaa']->setOption('renderer', new sfWidgetFormMySelectCheckbox(array( 'choices' => new sfCallable(array($this->widgetSchema['aaa'], 'getChoices')) ))); 

Поэтому в основном вы хотите, чтобы объект визуализации получал выбор из родительского виджета. Для этого вам нужно передать объект sfCallable который принимает array как первый аргумент, в котором вы передаете экземпляр родительского виджета и имя функции getChoices .

Помните также, что expanded параметр не используется, когда вы переопределяете renderer .