0

나는 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; 

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

: 여기

namespace App\Services\Validators; 

class UserCreateValidator extends Validator { 

    public static $rules = array(
     'firstName' => 'required', 
     'lastName' => 'required', 
     'email' => 'required|email|unique:users', 
     'company' => 'required' 
    ); 
} 

가 그리고는 기본 Validator 클래스입니다 ResellerControllerstatic::$rules[$key]을 설정하지 않으면 rk.

나는 static::$rules['company'] 여전히 속성과 UserCreateValidator에 있는지 (이 라인이 실행됩니다 후)는 Xdebug는 세션에서 볼 수 있습니다.

나는 늦은 정적 바인딩이이 문제를 해결할 것으로 생각 했습니까? 무엇이 잘못 되었나요?

+0

그냥 테스트 중입니다 ... 만약 당신이'UserCreateValidator'에'removeRule' 함수를 넣으면 작동합니까? – lukasgeiter

답변

0

문제가 해결되었습니다. 그것은에서 주석 부분이었다

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

반환하기는 잘 작동 나는 return false의 주석을 해제 한 후.

어리석은 실수 :)

관련 문제