从抽象父类中取消设置子对象静态变量php

问题描述:

我正在使用Laravel及其验证器。从抽象父类中取消设置子对象静态变量php

我在我的控制器下面的代码:

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' 
    ); 
} 

这里是基地Validator类:

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; 
    } 
} 

ResellerControllerstatic::$rules[$key]的不安定不窝RK。

我可以在的XDebug会议(此行被执行之后)看到static::$rules['company']仍然存在于UserCreateValidator财产。

我以为后期静态绑定应该解决这个问题吗? 有什么不对?

+0

只是为了测试......如果你在'UserCreateValidator'中放置'removeRule'函数,它会起作用吗? – lukasgeiter 2014-12-03 12:11:02

问题已解决。这是在注释的部分:

if(!array_key_exists($ruleKey, static::$rules)) //return false; 

的解封工作正常,我取消了return false后。

愚蠢的错误:)