在 Zend 中用破折号替换空格


replace space with dash in Zend?

    if ($settings->getSetting('que_tags', 0)) {
        $this->addElement('Text', 'qtags', array(
            'label' => Zend_Registry::get('Zend_Translate')->_('Tags'),
            'autocomplete' => 'on',
            'description' => Zend_Registry::get('Zend_Translate')->_('Use commas to separate tags.'),
            'allowEmpty' => false,
            'filters' => array('StringTrim', 'StringToLower', new Engine_Filter_Censor()),
        ));

我想改变这个:

"

英国"到"联合王国"。

我能够在代码上插入StringToLower,但是当我添加SeparatorToDash时,它不起作用。

有没有一种简单的方法可以通过在上面的代码中添加/插入一行来进行更改?

Zend提供了开箱即用的过滤器,该类称为Zend_Filter_Word_SeparatorToDash

$form = new Zend_Form_Element('test');
$form->addFilter(new 'Zend_Filter_Word_SeparatorToDash());
$form->setValue('United Kingdom united kingdom');
var_dump($form->getValue()); // United-Kingdom-united-kingdom

更高级的过滤可能需要从头开始创建过滤器类,或者作为替代方法,您可以随时使用 Zend_Filter_Callback

$form = new Zend_Form_Element('test');
$form->addFilter(
    new 'Zend_Filter_Callback(
        function ($value) {
            return str_replace(' ', '-', strtolower($value));
        }
    )
);
$form->setValue('United Kingdom united kingdom');
var_dump($form->getValue()); // united-kingdom-united-kingdom

对于更多的过滤器可以检查zend过滤器文件夹,其中有很多。