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; 

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

Разбавление static::$rules[$key] в ResellerController не делает гк.

я могу видеть в сессии в Xdebug (после того, как эта линия запускается на выполнение), что static::$rules['company'] по-прежнему присутствует в UserCreateValidator как собственность.

Я думал, что Late Static Binding должен решить эту проблему? Что не так?

+0

Просто для тестирования ... Это работает, если вы поставите 'функцию removeRule' в' UserCreateValidator'? – lukasgeiter

ответ

0

Проблема решена. Это было в комментировал участие в:

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

снятия с охраны работает нормально, когда я раскомментировать return false.

Глупая ошибка :)

Смежные вопросы