是否可以在打印之前更改变量名称?
Is it possible to change a variable name before printing it out?
register.php 文件
<?php
if(Input::exists()) {
if(Token::check(Input::get('token'))) {
$validate = new Validate();
$validation = $validate->check($_POST, array(
'username' => array(
'required' => true,
'min' => 2,
'max' => 20,
'unique' => 'users'),
'password' => array(
'required' => true,
'min' => 6),
'password_again' => array(
'required' => true,
'matches' => 'password'),
'name' => array(
'required' => false,
'min' => 2,
'max' => 50)
));
if($validation->passed()) {
$user = new User();
$salt = Hash::salt(32);
try {
$user->create(array(
'username' => Input::get('username'),
'password' => Hash::make(Input::get('password'), $salt),
'salt' => $salt,
'name' => Input::get('name'),
'joined' => date('Y-m-d H:i:s'),
'group' => 1
));
Session::flash('home', 'You have been registered and can now log in!');
Redirect::to('index.php');
} catch(Exception $e) {
die($e->getMessage());
}
} else {
foreach($validate->errors() as $error) {
echo $error, '<br>';
}
}
}
}
?>
Validate.php 文件
<?php
class Validate {
private $_passed = false,
$_errors = array(),
$_db = null;
public function __construct() {
$this->_db = DB::getInstance();
}
public function check($source, $items = array()) {
foreach($items as $item => $rules) {
foreach($rules as $rule => $rule_value) {
$value = trim($source[$item]);
if($rule === 'required' && $rule_value === true && empty($value)) {
$this->addError("{$item} is required.");
} else if (!empty($value)) {
switch($rule) {
case 'min':
if(strlen($value) < $rule_value) {
$this->addError("{$item} must be a minimum of {$rule_value} characters.");
}
break;
case 'max':
if(strlen($value) > $rule_value) {
$this->addError("{$item} must be a maximum of {$rule_value} characters.");
}
break;
case 'matches':
if($value != $source[$rule_value]) {
$this->addError("{$rule_value} must match {$item}.");
}
break;
case 'unique':
$check = $this->_db->get('users', array($item, '=', $value));
if($check->count()) {
$this->addError("{$item} is already taken.");
}
break;
}
}
}
}
if(empty($this->_errors)) {
$this->_passed = true;
}
return $this;
}
protected function addError($error) {
$this->_errors[] = $error;
}
public function passed() {
return $this->_passed;
}
public function errors() {
return $this->_errors;
}
}
这是我用来检查密码长度、用户名和名称是否正确的代码。如果用户输入的密码不正确,它将输出错误。例如 "password_again does not match"。是否可以通过任何方式更改此变量名称?我希望它输出 = "Password Again is not correct" 或 "Username is already is use"。使用大写字母并且没有下划线看起来会好得多。
希望你能理解我的问题
期待您的回答。
可以将错误消息嵌入表单定义中的某处,以便在发生特定类型的错误时显示自定义消息。
'password_again' => array(
'error_message' => 'Your custom error message here!'
'required' => true
)
或者可能有一个查找文件,用于查找要在特定字段中显示的文本。
$error_messages = array(
'password_again' => 'We need a better password'
);
请参阅 Laravel 的 Validation 部分以获取有关如何存储自定义错误消息的想法。
最终编辑:
对不起。我没看到你的 Validator.php class.
这就是你想要的:
Validate.php
<?php
class Validate {
private $_passed = false,
$_errors = array(),
$_db = null;
public function __construct() {
$this->_db = DB::getInstance();
}
public function check($source, $items = array()) {
foreach($items as $item => $rules) {
foreach($rules as $rule => $rule_value) {
$itemName = $item;
if ($rule == "display_name") {
continue;
} else {
if (array_key_exists("display_name", $rules)) $itemName = $rules["display_name"];
}
$value = trim($source[$item]);
if($rule === 'required' && $rule_value === true && empty($value)) {
$this->addError("{$itemName} is required.");
} else if (!empty($value)) {
switch($rule) {
case 'min':
if(strlen($value) < $rule_value) {
$this->addError("{$itemName} must be a minimum of {$rule_value} characters.");
}
break;
case 'max':
if(strlen($value) > $rule_value) {
$this->addError("{$itemName} must be a maximum of {$rule_value} characters.");
}
break;
case 'matches':
if($value != $source[$rule_value]) {
$this->addError("{$rule_value} must match {$itemName}.");
}
break;
case 'unique':
$check = $this->_db->get('users', array($item, '=', $value));
if($check->count()) {
$this->addError("{$itemName} is already taken.");
}
break;
}
}
}
}
if(empty($this->_errors)) {
$this->_passed = true;
}
return $this;
}
protected function addError($error) {
$this->_errors[] = $error;
}
public function passed() {
return $this->_passed;
}
public function errors() {
return $this->_errors;
}
}
刚刚编辑了 check() 方法,将 $item(键名)替换为键 "display_name" 的值(如果存在)。如果不存在,只需使用 $item 本身。此外,在遍历数组时,如果当前 $rule 为 "display_name",则它会从下一次迭代开始继续循环。这样你就不会处理 "display_name" 键。
如果我没记错的话,现在您只需要在规则旁边传递另一个键,名称为 "display_name" 以及您要表示该项目的显示字符串。例如:
$validation = $validate->check($_POST, array(
'username' => array(
'required' => true,
'min' => 2,
'max' => 20,
'unique' => 'users',
'display_name' => 'Username'),
'password' => array(
'required' => true,
'min' => 6,
'display_name' => 'Password'),
'password_again' => array(
'required' => true,
'matches' => 'password',
'display_name' => 'Password Again'),
'name' => array(
'required' => false,
'min' => 2,
'max' => 50,
'display_name' => 'Name')
));
抱歉之前的所有编辑。
为了将 some_string
变成 Some String
你可以这样做:
echo ucwords(str_replace('_', ' ', 'password_again')); // "Password Again"
在 validate.php
文件中,您可以使用此方法在获取值后修改 $item
的值:
...
$value = trim($source[$item]);
$item = ucwords(str_replace('_', ' ', $item));
...
然后消息会自动像 "Password Again must be a minimum of 2 characters"。您还可以根据需要修改任何错误消息:
...
case 'matches':
if($value != $source[$rule_value]) {
// Old: $this->addError("{$rule_value} must match {$item}.")
$this->addError("{$item} is not correct.");
}
break;
case 'unique':
$check = $this->_db->get('users', array($item, '=', $value));
if($check->count()) {
// Old: $this->addError("{$item} is already taken.");
$this->addError("{$item} is already in use.");
}
break;
...
以此类推
register.php 文件
<?php
if(Input::exists()) {
if(Token::check(Input::get('token'))) {
$validate = new Validate();
$validation = $validate->check($_POST, array(
'username' => array(
'required' => true,
'min' => 2,
'max' => 20,
'unique' => 'users'),
'password' => array(
'required' => true,
'min' => 6),
'password_again' => array(
'required' => true,
'matches' => 'password'),
'name' => array(
'required' => false,
'min' => 2,
'max' => 50)
));
if($validation->passed()) {
$user = new User();
$salt = Hash::salt(32);
try {
$user->create(array(
'username' => Input::get('username'),
'password' => Hash::make(Input::get('password'), $salt),
'salt' => $salt,
'name' => Input::get('name'),
'joined' => date('Y-m-d H:i:s'),
'group' => 1
));
Session::flash('home', 'You have been registered and can now log in!');
Redirect::to('index.php');
} catch(Exception $e) {
die($e->getMessage());
}
} else {
foreach($validate->errors() as $error) {
echo $error, '<br>';
}
}
}
}
?>
Validate.php 文件
<?php
class Validate {
private $_passed = false,
$_errors = array(),
$_db = null;
public function __construct() {
$this->_db = DB::getInstance();
}
public function check($source, $items = array()) {
foreach($items as $item => $rules) {
foreach($rules as $rule => $rule_value) {
$value = trim($source[$item]);
if($rule === 'required' && $rule_value === true && empty($value)) {
$this->addError("{$item} is required.");
} else if (!empty($value)) {
switch($rule) {
case 'min':
if(strlen($value) < $rule_value) {
$this->addError("{$item} must be a minimum of {$rule_value} characters.");
}
break;
case 'max':
if(strlen($value) > $rule_value) {
$this->addError("{$item} must be a maximum of {$rule_value} characters.");
}
break;
case 'matches':
if($value != $source[$rule_value]) {
$this->addError("{$rule_value} must match {$item}.");
}
break;
case 'unique':
$check = $this->_db->get('users', array($item, '=', $value));
if($check->count()) {
$this->addError("{$item} is already taken.");
}
break;
}
}
}
}
if(empty($this->_errors)) {
$this->_passed = true;
}
return $this;
}
protected function addError($error) {
$this->_errors[] = $error;
}
public function passed() {
return $this->_passed;
}
public function errors() {
return $this->_errors;
}
}
这是我用来检查密码长度、用户名和名称是否正确的代码。如果用户输入的密码不正确,它将输出错误。例如 "password_again does not match"。是否可以通过任何方式更改此变量名称?我希望它输出 = "Password Again is not correct" 或 "Username is already is use"。使用大写字母并且没有下划线看起来会好得多。
希望你能理解我的问题
期待您的回答。
可以将错误消息嵌入表单定义中的某处,以便在发生特定类型的错误时显示自定义消息。
'password_again' => array(
'error_message' => 'Your custom error message here!'
'required' => true
)
或者可能有一个查找文件,用于查找要在特定字段中显示的文本。
$error_messages = array(
'password_again' => 'We need a better password'
);
请参阅 Laravel 的 Validation 部分以获取有关如何存储自定义错误消息的想法。
最终编辑:
对不起。我没看到你的 Validator.php class.
这就是你想要的:
Validate.php
<?php
class Validate {
private $_passed = false,
$_errors = array(),
$_db = null;
public function __construct() {
$this->_db = DB::getInstance();
}
public function check($source, $items = array()) {
foreach($items as $item => $rules) {
foreach($rules as $rule => $rule_value) {
$itemName = $item;
if ($rule == "display_name") {
continue;
} else {
if (array_key_exists("display_name", $rules)) $itemName = $rules["display_name"];
}
$value = trim($source[$item]);
if($rule === 'required' && $rule_value === true && empty($value)) {
$this->addError("{$itemName} is required.");
} else if (!empty($value)) {
switch($rule) {
case 'min':
if(strlen($value) < $rule_value) {
$this->addError("{$itemName} must be a minimum of {$rule_value} characters.");
}
break;
case 'max':
if(strlen($value) > $rule_value) {
$this->addError("{$itemName} must be a maximum of {$rule_value} characters.");
}
break;
case 'matches':
if($value != $source[$rule_value]) {
$this->addError("{$rule_value} must match {$itemName}.");
}
break;
case 'unique':
$check = $this->_db->get('users', array($item, '=', $value));
if($check->count()) {
$this->addError("{$itemName} is already taken.");
}
break;
}
}
}
}
if(empty($this->_errors)) {
$this->_passed = true;
}
return $this;
}
protected function addError($error) {
$this->_errors[] = $error;
}
public function passed() {
return $this->_passed;
}
public function errors() {
return $this->_errors;
}
}
刚刚编辑了 check() 方法,将 $item(键名)替换为键 "display_name" 的值(如果存在)。如果不存在,只需使用 $item 本身。此外,在遍历数组时,如果当前 $rule 为 "display_name",则它会从下一次迭代开始继续循环。这样你就不会处理 "display_name" 键。
如果我没记错的话,现在您只需要在规则旁边传递另一个键,名称为 "display_name" 以及您要表示该项目的显示字符串。例如:
$validation = $validate->check($_POST, array(
'username' => array(
'required' => true,
'min' => 2,
'max' => 20,
'unique' => 'users',
'display_name' => 'Username'),
'password' => array(
'required' => true,
'min' => 6,
'display_name' => 'Password'),
'password_again' => array(
'required' => true,
'matches' => 'password',
'display_name' => 'Password Again'),
'name' => array(
'required' => false,
'min' => 2,
'max' => 50,
'display_name' => 'Name')
));
抱歉之前的所有编辑。
为了将 some_string
变成 Some String
你可以这样做:
echo ucwords(str_replace('_', ' ', 'password_again')); // "Password Again"
在 validate.php
文件中,您可以使用此方法在获取值后修改 $item
的值:
...
$value = trim($source[$item]);
$item = ucwords(str_replace('_', ' ', $item));
...
然后消息会自动像 "Password Again must be a minimum of 2 characters"。您还可以根据需要修改任何错误消息:
...
case 'matches':
if($value != $source[$rule_value]) {
// Old: $this->addError("{$rule_value} must match {$item}.")
$this->addError("{$item} is not correct.");
}
break;
case 'unique':
$check = $this->_db->get('users', array($item, '=', $value));
if($check->count()) {
// Old: $this->addError("{$item} is already taken.");
$this->addError("{$item} is already in use.");
}
break;
...
以此类推