zend 2 - 验证消息中的自定义字段名称

时间:2014-10-17 17:50:57

标签: php zend-framework validation

我想自定义输入名称,以便在验证表格

时发生错误时显示在我的视图中
$this->add(array(
    'name' => 'generica_descricao', // I WOULD LIKE TO CALL HIM DESCRIÇÃO
    //'custom_name' => 'Descrição',
    'required' => true,
    'validators' => array(
        array(
            'name' => 'NotEmpty',
            'options' => array(
                'messages' => array(
                    'isEmpty' => 'O campo não pode ser vazio'
                ),
            ),
        ),
));

当我调用getMessage()作为上面的代码时

if (!$form->isValid()) {
    $resultado = new Resultado(Resultado::FLAG_WARNING, $form->getMessages());
    $resultado->setaRetornoLayoutErro($this->getServiceLocator());
    return $resultado->getJson();
}

他们将返回

array('Descrição' => 'O campo não pode ser vazio');

然后我可以将这个数组提供给我的视图并显示正确消息的对话框,任何人都可以帮助在zend中做到这一点吗?

2 个答案:

答案 0 :(得分:1)

我发现了一种最好的方法,创建一个新方法,扩展默认表单,从表单中的标签中获取名称。

abstract class GenericForm extends Form {

    public function getMessagesTranslated($elementName = null) {

        $mensagensOriginais = $this->getMessages($elementName);

        foreach ($mensagensOriginais as $chave => $mensagens) {
            $label = TranslateUtil::translate($this->get($chave)->getLabel());
            $mensagensOriginais[$label] = $mensagensOriginais[$chave];
            unset($mensagensOriginais[$chave]);
        }

        return mensagensOriginais;
    }

答案 1 :(得分:0)

我使用翻译字段名称的方法自定义我的过滤器,这不是我想要的,但现在可以使用:

通用过滤器

abstract function convertErrorsArrayKeyToFriendlyNames($erros);

特定过滤器:

public function convertErrorsArrayKeyToFriendlyNames($erros) {

    foreach ($erros as $chave => $valor) {
        if ($chave == 'generica_descricao') {
            $erros['Descrição'] = $erros[$chave];
            unset($erros[$chave]);
        } else if ($chave == 'generica_ordem') {
            $erros['Ordem'] = $erros[$chave];
            unset($erros[$chave]);
        } else if ($chave == 'generica_ativo') {
            $erros['Ativo'] = $erros[$chave];
            unset($erros[$chave]);
        }
    }

    return $erros;
}

并在控制器中

if (!$form->isValid()) {
    $erros = $filtro->convertErrorsArrayKeyToFriendlyNames($form->getMessages());
    $resultado = new Resultado(Resultado::FLAG_WARNING, $erros);
    $resultado->setaRetornoLayoutErro($this->getServiceLocator());
    return $resultado->getJson();
}