laravel — сбросить статическую переменную дочернего объекта из абстрактного родительского класса Stack Overflow

Я использую 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'
);
}

А вот и базовый класс 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 как собственность.

я думал так Позднее статическое связывание должен решить эту проблему?
Что случилось?

0

Решение

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

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

Отключение работает нормально после того, как я раскомментирую return false,

Глупая ошибка 🙂

0

Другие решения

Других решений пока нет …