2012-03-09 2 views
0

Я хочу написать пользовательский виджет, который простирается от sfFormWidgetChoice. Тем не менее, я считаю, что руководство по документации на symfony запутывает. Я чувствую, что они просто бросают заполненный код у нас. http://www.symfony-project.org/more-wit. ValidatorsОшибка в пользовательском виджете Symfony

Я получаю эту ошибку, в частности: Undefined индекс: Renderer_options

Я знаю, что я делаю что-то очень неправильно. Я просто не знаю, что мне нужно переопределить на sfFormWidgetChoice.

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

ответ

1

При создании пользовательского виджета вы обычно переопределяете configure (для добавления настраиваемых опций) и render (для изменения визуализации виджета).

Я думаю, вы получите эту ошибку, потому что вы не вызовите configure метод родительского класса:

// in YourCustomWidget class 
protected function configure($options = array(), $attributes = array()) 
{ 
    parent::configure($options, $attributes); 

    // add your options here 
    $this->addRequiredOption('your_mandatory_option'); 
    $this->addOption('your_optional_option', 'default_value'); 
} 

sfWidgetFormChoice имеет только один обязательный параметр («аргумент», как вы назвали его) массив choices так что вы должны передать его при создании виджета:

// in your form class 
$this->setWidget('your_field', new YourCustomWidget(array(
    `choices` => array('a' => 'a', 'b' => 'b', 'c' => 'c') 
))); 

Чтобы настроить отображение вашего виджета переопределить метод визуализации (как и показанный в the docs) орудии пользовательской логики.

+0

Спасибо, что, казалось, исправить ошибку. Теперь я получаю следующее исключение во время выполнения: для YourCustomWidget требуются следующие варианты: «выборы». Внесите опции ['choice'] в свой метод настройки MyCustomWidget и передайте его родительскому :: configure(). ¿Можете ли вы создать виджет, который не получает никаких аргументов? Это неправильно? – JavierIEH

+0

Обязательные параметры проверяются в конструкторе непосредственно перед вызовом configure ... но почему бы вам просто не создавать варианты в форме и передавать их виджету? Почему вы хотите расширить 'sfWidgetFormChoice', если вы не хотите проходить выборы? Какой виджет вы хотели бы создать? Вы должны расширить 'sfWidget' или' sfWidgetForm' (если вы хотите использовать значение id или значение по умолчанию) и просто переопределить метод «render». – 1ed

+0

Спасибо, я решил проблему. В configure() я сделал addOption ('choice', myArray), и он сработал ... кажется, что он переопределяет требуемую опцию из sfWidgetFormChoices. Чувствует себя взломанным, возможно, это неправильно, но он работает ... Мне нужен был sfWidgetFormChoice render(), потому что я хочу выбрать combobox со строками, упорядоченными по-особому. – JavierIEH

Смежные вопросы