我正在使用Laravel,它是Validators。
我的控制器中有以下代码:
class ResellerController extends BaseController{
public function add() {
//some code before
$userValidator = new App'Services'Validators'UserCreateValidator();
//HERE I WANT TO REMOVE THE company KEY FROM THE RULES IN THE USERS CREATE VALIDATOR
$userValidator->removeRule('company');
//code execution continues
}
}
UserCreateValidator 扩展了一个父 Validator 类:
namespace App'Services'Validators;
class UserCreateValidator extends Validator {
public static $rules = array(
'firstName' => 'required',
'lastName' => 'required',
'email' => 'required|email|unique:users',
'company' => 'required'
);
}
下面是基本的验证器类:
namespace App'Services'Validators;
abstract class Validator {
/**
* Validation rules
* @var array
*/
public static $rules;
//THIS CODE DOES NOT WORK IN THE CONTROLLER UP
public static function removeRule($ruleKey){
if(is_array($ruleKey))
{
foreach($ruleKey as $key)
{
if(!array_key_exists($key, static::$rules)) continue;
unset(static::$rules[$key]);
}
return true;
}
if(!array_key_exists($ruleKey, static::$rules)) //return false;
unset(static::$rules['company']);
return true;
}
}
ResellerController
中static::$rules[$key]
的不安是行不通的。
我可以在 XDEBUG 会话中看到(执行此行后),static::$rules['company']
仍然作为属性存在于UserCreateValidator
中。
我认为后期静态绑定应该可以解决这个问题吗?怎么了?
问题解决了。它在评论部分:
if(!array_key_exists($ruleKey, static::$rules)) //return false;
取消注释return false
后,取消设置工作正常。
愚蠢的错误:)