如何使此代码具有键值,而无需创建多维数组



我正在用PHP学习OOP,并且很好地掌握了它,但是我有一些代码对我来说不太合适,我需要一些帮助。大部分代码来自构建登录系统的教程。教程中提供的代码在html页面的顶部显示错误。我认为这将是更友好的用户有错误旁边的表单字段出现错误,所以我写了额外的代码,工作,但它似乎很重。我想听听你的建议,让它变得轻松一点。类名为Validation,它的方法从注册表单调用。我不知道你们是否需要张贴整个课程,所以我会张贴我正在学习的部分。下面是创建错误数组的方法。

private function addError($error)
{
    $this->_errors[] = $error;
}
public function errors()
{
    return $this->_errors;
}

这里只有一行错误代码,它填充了在页面顶部显示错误的数组。在这个块中,addError()方法调用中的$item是产生错误的字段名。

if($rule === 'required' && empty($value))
{
    $this->addError("$item field is required."));                   
}

这是我如何改变代码,这样我就可以得到$item值放在数组中。然而,这创建了一个多维数组,我必须循环几层才能得到$item的键。

if($rule === 'required' && empty($value))
{
    $this->addError(array($item=>"This field is required.")); //item is going to equal field name you can change this in the registration file
} 

这是我写的遍历数组的方法,这是我不喜欢的。

public function frm_errors($item)
{   
    $errors = array($this->errors());
    foreach($errors as $error => $error_value)
    { 
        foreach($error_value as $field_error => $field_error_values)
        {   
            foreach($field_error_values as $field_error_value => $value )
            {
                if(array_key_exists($item, $field_error_values))
                {
                    echo $value;
                }
            }   
        }               
    }
}

这是注册表单中的方法调用。

<input type="text" name="username" id="username" value="<?php echo Input::get('username'); ?>" autocomplete="off"><br />
<?php echo "<p class='error'>" . $validation->frm_errors('username') . "</p>"; ?>

如有任何帮助,不胜感激。

下面是添加了字段名后的数组。

Array
(
    [0] => Array
        (
            [username] => This field is required.
        )
    [1] => Array
        (
            [email] => This field is required.
        )
    [2] => Array
        (
            [password] => This field is required.
        )
    [3] => Array
        (
            [pwrd_again] => This field is required.
        )
    [4] => Array
        (
            [name] => This field is required.
        )
)

下面是不使用addError方法捕获$项的情况叫

Array
(
    [0] => username must contain at least 5 characters's.
    [1] => This field is required.
    [2] => This field is required.
    [3] => This field is required.
    [4] => This field is required.
)

我假设参数$item是可能有错误消息的字段的名称。

如果你var_dump($this->errors())您将看到数组的实际样子。然后,您将看到如何访问所需的字段值。

你想要的。; -/

我不是在尴尬。我现在才意识到,我已经参与了"编程",我觉得很有趣,你真正想要的是——取代你原来的程序。它看起来如此简单是由于你所做的工作!你的工作显示数组等帮助很大。

    public function frm_errors($item)
    {
        // $errorsFound = false;
        $errors = $this->errors(); // this is already an array.
        foreach($errors as $value)
        {
           if (key($value) == $item) {
             // $errorsFound = true;
             // echo key($value);     // fieldname
             echo current($value); // error message
           }
        }
        // return $errorsFound;
    }

最简单的形式:

    public function frm_errors($item)
    {
        foreach($this->errors() as $value) // $value is an array of: $fieldName => $message
        {
           if (key($value) == $item) { // required field? 
             echo current($value);     // error message
           }
        }
    }

相关内容

  • 没有找到相关文章

最新更新