Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何获取数组中的验证错误?_Php_Codeigniter_Validation - Fatal编程技术网

Php 如何获取数组中的验证错误?

Php 如何获取数组中的验证错误?,php,codeigniter,validation,Php,Codeigniter,Validation,我正在使用Codeigniter开发一个RESTAPI。 我需要将表单验证中的所有错误消息以数组格式显示,以便 我可以轻松地用JSON或XML响应 现在Codeigniter正在传递带有分隔符的错误消息,如下所示 但这对于基于REST的API来说并不好 <p>There was an error with this item</p> 如何获取数组中的错误 感谢所有的投入 您可以轻松地对其进行变换: /** * @param $errors string * @ret

我正在使用Codeigniter开发一个RESTAPI。 我需要将表单验证中的所有错误消息以数组格式显示,以便 我可以轻松地用JSON或XML响应

现在Codeigniter正在传递带有分隔符的错误消息,如下所示 但这对于基于REST的API来说并不好

<p>There was an error with this item</p>
如何获取数组中的错误


感谢所有的投入

您可以轻松地对其进行变换:

/**
 * @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;
}

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

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

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

Tags。它们没有标题。可能Codeigniter表单模块不够灵活,无法满足您的需要。用更灵活的实现取代它是否是您的一个选择?也许。你知道有什么好的选择吗?很有趣!这样的扩展看起来怎么样?酷!我如何在控制器中使用它?没关系。明白了,非常感谢!这是我在控制器中访问它的方式:$This->form\u validation->get\u error\u array这段代码在本地服务器Mac上运行得很好,但在远程服务器上我得到了一个500错误。可能有什么问题?看起来不错,但它在阵列的末尾添加了一个空插槽。我怎么能不说呢?数组[0]=>数字字段是必需的。[1] =>与公认的答案相比,我更喜欢这个答案,因为它不需要您更改CodeIgniter核心代码