我正在用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
}
}
}