Мне не нравятся решения, которые наследуют Zend_Form, поэтому я разработал другой способ сделать это.
<?php
abstract class Application_Style
{
private $_object;
function __construct ($object = null)
{
if (isset ($object))
{
$this->apply ($object);
}
}
function apply ($object)
{
$this->setObject ($object);
if ($this->filter ())
{
$this->onApply ();
}
return $object;
}
function __call ($method, $arguments)
{
return call_user_func_array (array (
$this->getObject (),
$method
), $arguments);
}
abstract protected function onApply ();
protected function filter ()
{
return true;
}
function setObject ($_object)
{
$this->_object = $_object;
}
function getObject ()
{
return $this->_object;
}
}
class Application_Style_ElementClass extends Application_Style
{
function onApply ()
{
foreach ($this->getObject ()
->getElements () as $element)
{
$element->setOptions (array (
'class' => 'test-class'
));
}
}
function filter ()
{
return $this->getObject () instanceof Zend_Form;
}
}
$form = new Zend_Form ();
$form->addElement ('text', 'name');
new Application_Style_ElementClass ($form); // apply the class name
echo $form;
Таким образом, вы можете применить все стили, необходимые для любой формы, в любом порядке.