【问题标题】:How to get validation errors in an array?如何在数组中获取验证错误?
【发布时间】:2011-08-18 15:03:00
【问题描述】:

我正在使用 Codeigniter 开发一个 REST API。 我需要以数组格式获取来自表单验证的所有错误消息,以便 我可以轻松地使用 JSON 或 XML 进行响应。

现在 Codeigniter 正在以<p> 作为分隔符传递错误消息(见下文) 但这对于基于 REST 的 API 来说并不好。

<p>There was an error with this item</p>

如何获取数组中的错误?

感谢所有输入!

【问题讨论】:

  • 标签。他们不进入标题。
  • 可能 Codeigniter 表单模块对您的目的不够灵活。您是否可以选择更灵活的实现来替换它?
  • 也许吧。你知道有什么好的替代品吗?

标签: php codeigniter validation


【解决方案1】:

表单验证库将错误存储在一个数组中并循环遍历它们以生成错误字符串。它们存储在一个名为$_error_array 的私有变量中。您可以使用返回错误数组的简单方法来扩展库。

class MY_Form_validation extends CI_Form_validation
{
    function get_error_array()
    {
        return $this->_error_array;
    }
}

我假设您熟悉扩展核心 CI 库,但表单验证库的此扩展将为您提供一种方法,以将错误作为数组返回,其中 name 属性的值作为键,消息作为值。我在我的一个项目中对其进行了测试,效果很好。

【讨论】:

  • 有趣!这样的扩展会是什么样子?
  • 酷!如何在我的控制器中使用它?
  • 没关系。明白了,非常感谢!这就是我在控制器中访问它的方式: $this->form_validation->get_error_array()
  • 此代码在我的本地服务器 (Mac) 上运行良好,但在远程服务器上出现 500 错误。有什么问题?
【解决方案2】:

您可以轻松转换它:

/**
 * @param $errors string
 * @return array
 */
function transformErrorsToArray ($errors) {
    $errors = explode('</p>', $errors);
    foreach ($errors as $index => $error) {
        $error = str_replace('<p>', '', $error);
        $error = trim($error);
        // ... more cleaning up if necessary
        $errors[$index] = $error
    }
    return $errors;
}

【讨论】:

  • 看起来不错,但它在数组末尾添加了一个空“槽”。我怎么能把它排除在外?数组([0] => Number 字段是必需的。[1] =>)
  • 我比公认的更喜欢这个答案,因为它不需要您更改 CodeIgniter 核心代码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-04
  • 2015-08-09
  • 2020-08-03
  • 2018-01-15
  • 2021-06-19
  • 2016-06-01
相关资源
最近更新 更多