在Zend Framework中向文本字段添加美元符号

时间:2011-03-16 16:36:54

标签: zend-framework zend-form

有没有办法在<input>之前为Zend_Form元素添加“$”? (当然,使用标准ZF的东西会很棒。)

编辑:例如,如果Zend_Form为cost元素生成的html类似于:(非常简化)

<label>Cost:</label>
<input type="text" name="cost" />

我希望输出这个:

<label>Cost:</label>
$ <input type="text" name="cost" />

3 个答案:

答案 0 :(得分:3)

使用AnyMarkup装饰器,您可以执行以下操作:

$element->setDecorators(array(
    'ViewHelper',
    array('AnyMarkup', array('markup' => '$', 'placement' => 'prepend')),
    // And any other decorators, like Label, Description, Errors, and 
    // other wrapping like td, tr, etc.
));

像往常一样,请务必使用表单注册装饰器的命名空间。因此,如果您使用位于包含路径上文件My_Decorator_AnyMarkup中的链接代码段My/Decorator/AnyMarkup.php中指定的类,那么您需要以下内容:

$form->addElementPrefixPath('My_Decorator_', 'My/Decorator', 'decorator');

答案 1 :(得分:3)

你可以使用callback装饰器在你的元素中放置你想要的任何html:

例如,在你的情况下,我可以这样做:

    $el1 = $this->createElement('text', 'el1')->setLabel('Cost:');

    // Anonymous function that will generate your custom html (needs PHP 5.3).
    // For older PHP there are other ways of making anonymous functions.
    $myHtml = function($content, $element, array $options) {
                return '$';
            };
    $el1->setDecorators(array(
        'ViewHelper',
        'Errors',
        array('Callback', array('callback' => $myHtml, 'placement' => 'PREPEND')),
        'Label'
    ));

这应该会产生以下html代码:

<label for="el1" class="optional">Cost:</label> 
$
<input type="text" name="el1" id="el1" value="" /> 

希望这将是有帮助的,或至少指出你正确的方向。

答案 2 :(得分:1)

您可以将其添加为说明

$this->createElement('text', 'cost')
     ->setLabel('Cost:')
     ->setDescription('$');

然后正确配置元素的装饰器。

<强> UPD:

推荐元素的装饰者:

array(
    'ViewHelper',
    array('Description', array('placement' => Zend_Form_Decorator_Abstract::PREPEND, 'tag' => 'em'))
);

请注意展示位置选项。