如何获取<label>标签</label>中包含的表单元素标签

时间:2011-08-17 07:33:20

标签: php zend-framework label zend-form

我正在使用Zend Form创建复选框元素:

$element = $this->CreateElement('checkbox', 'CheckIt');
$element->setLabel('Check It');
$elements[] = $element;

当我得到这样的标签时:

echo $this->element->getElement("CheckIt")->getLabel();

输出:

Check It

但我想要关注输出:

<label for='CheckIt'>Check It</label>

getLabel()函数中是否有任何选项,或者是否有任何其他函数可以实现此目的。

由于

3 个答案:

答案 0 :(得分:2)

<强> renderLabel()

<?php echo $this->form->getElement("CheckIt")->renderLabel(); ?>

<?php echo $this->form->getElement("CheckIt")->renderLabel(); ?>

渲染该标签

答案 1 :(得分:1)

我很害怕虽然装饰者很难学习和理解,但一旦你理解了它们,它们就很有用了

这是我的课程之一,您可以轻松添加它以满足您的需求

<?php
class My_Label extends Zend_Form_Decorator_Abstract
{
    protected $_format = '<td class="nome_campo"><label for="%s">%s%s</label></td>';

    public function render($content)
    {
        $element = $this->getElement();

        $id      = htmlentities($element->getId(), ENT_QUOTES, "UTF-8");
        $label   = htmlentities($element->getLabel(), ENT_QUOTES, "UTF-8");
        if ($element->isRequired())
            $asterisk = '<span class="required">*</span> ';
        else
            $asterisk = '';

        $markup = sprintf($this->_format, $id, $asterisk, $label);


        //per avere valid xhtml/html
        if (stripos($element->getType(), 'radio') !== false )//Zend_Form_Element_Radio
        {
            $this->_format = '<td class="nome_campo">%s%s</td>';
            $markup = sprintf($this->_format, $asterisk, $label);
        }


        $placement = $this->getPlacement();
        $separator = $this->getSeparator();
        switch ($placement) {
            case self::APPEND:
                return $content . $separator . $markup;
            case self::PREPEND:
            default:
                return $markup . $separator . $content;
        }
    }
}

答案 2 :(得分:1)

您的问题存在概念上的误解:getLabel()是对象上属性的简单getter方法。

$element; // is a Zend_Element object
$label = $element->getLabel(); // returns the value of the label property and not a HTML string

如果您想要HTML输出,则必须在对象上调用render(),但这将呈现整个表单而不仅仅是标签值。您可以禁用元素的装饰器,但是在渲染表单时,您将再次启用它们。

另外,您的问题中存在正式错误。它要么是

$element->getLabel();
// or once you have added the element to the form
$this->getElement('CheckIt')->getLabel();