我准备了一个示例,应该有助于解决您的问题。这里是:
$form = new Zend_Form;
$form->removeDecorator('htmlTag');
$form->setAction('/index/login')
->setMethod('post')
->setAttrib('id', 'login_form');
$username = $form->createElement('text', 'username');
$username->addValidator('alnum')
->setRequired(TRUE)
->setLabel('Username')
->setAttrib('class', 'login_input');
// anonymous function that will generate your image tag
$makeImg = function($content, $element, array $options) {
return '<img src="/images/' . $options['img'] . '" class="' . $options['class'] . ' " alt=""/> ';
};
$username->setDecorators(array(
'ViewHelper',
'Errors',
array('Label', array('class' => 'login_label')),
array('Callback',
array(
'callback' => $makeImg,
'img' => 'user_icon.png',
'class' => 'login_icon',
'placement' => 'PREPEND'
)
),
array('HtmlTag', array('tag' => null, 'class' => 'input_row')),
));
$form->addElement($username);
$submit = $form->createElement('submit', 'login', array(
'label' => 'Login',
'class' => 'login_submit'
)
);
$submit->setDecorators(array(
'ViewHelper',
'Errors',
array('HtmlTag', array('tag' => null, 'class' => 'input_row')),
));
$form->addElement($submit);
该表单生成以下 html(我没有生成密码字段,因为您的 Zend_Form 代码不包含它):
<form id="login_form" enctype="application/x-www-form-urlencoded" action="/index/login" method="post">
<div class="input_row">
<img src="/images/user_icon.png" class="login_icon " alt="">
<label for="username" class="login_label required">Username</label>
<input type="text" name="username" id="username" value="" class="login_input">
</div>
<div class="input_row">
<input type="submit" name="login" id="login" value="Login" class="login_submit">
</div>
</form>
值得一提的是我用过Callback http://framework.zend.com/manual/en/zend.form.standardDecorators.html装饰师。使用此装饰器,您可以调用任何可用于将自定义 html 注入表单的函数。在这个例子中我做了一个匿名的 http://php.net/manual/en/functions.anonymous.php我分配给的函数$makeImg
变量(为此你需要 PHP 5.3,但在旧版本的 PHP 中你也可以这样做,但使用例如 create_function 函数)。这$makeImg
变量是我的回调。可以看出该函数生成您的img
html 标签。
希望这对您有帮助。