CForm & Widgets

Я делаю кастомный textarea.

Делаю его в виде виджета.

Использую в билдере форм CForm.

в описании формы пишу




		'elements' => array(

			'my_element_name' => array(

				'type' => 'application.components.MyWidget',

				'rows' => 1,

				'class' => 'ext',

			),



и для этого мне приходится иметь tows, class и что нить другое что мне понадобится в виде публичных св-в класса виджета.

это нормально ? или я могу это получить как-то еще ?

из мана




 Если имя опции не является свойством CFormInputElement, оно будет считаться атрибутом соответствующего HTML-тега input. К примеру, так как выше опция maxlength не является свойством CFormInputElement, она будет использована как атрибут maxlength HTML-элемента input.



нельзя ли то же самое получить и для виджета ?

только не нужно атрибутом сразу делать, пусть лучше бы какое нить приватное свойство (массив) класса виджета наполнялось.

В виджетах принято html атрибуты задавать через свойство htmlOptions (пример). Но если вам это кажется неудобным (хотя на мой взгляд перемешивание свойств самого виджета с атрибутами тега не самая удачная идея), то объявляйте их как public свойства виджета либо переопределяйте метод __set($name, $value) класса.

в том то и дело что я ищу рабочий способ с htmlOptions.

Но не работает.

Пример моего кода из первого сообщения работает корректно только тогда, когда rows и class объявлены в виджете как public св-ва.

и мне это не нравится.

а все оказалось прозаичнее :)




'elements' => array(

                        'my_element_name' => array(

                                'type' => 'application.components.MyWidget',

                                'htmlOptions' => array(

                                    'rows' => 1,

                                    'class' => 'ext',

                                )

                        ),



я видел что htmlOptions есть у предка моего виджета, но почему-то не догнал как его засетить :)

спасибо.