Здравствуйте, сижу уже 4 часа голову севе ломаю помогите плиз.
Мне нужно сделать так чтоб некоторые поля в модели были приватными. но мне не помогает ни мутаторы ни магические методы типа __call и __set.
Обрадовался Думал нашел решение и написал Trait.
<?php namespace Shohabbos\Express\Traits;
use Exception;
trait Privatable
{
/**
* @var array List of attribute names which should be private.
*
* protected $private = [];
*/
// public function __get($fieldName) {
// $this->isPrivate($fieldName);
// return parent::__get($fieldName);
// }
public function __set($fieldName, $value) {
$this->isPrivate($fieldName);
return parent::__set($fieldName, $value);
}
public function isPrivate($fieldName) {
if (in_array($fieldName, $this->unsettable)) {
throw new Exception('The '.$fieldName.' property is private');
}
}
}
И потом я понял что такой код все блокирует. Попробовал исключить внешние классы и это тоже не работает если только не через debug_backtrace. Хотелось бы получить контроль над динамическими полями. Сделать их `private,protected,public`
Есть чувства что копаю не в ту сторону. Но пока ничего не приходит на ум.
Проста количество кода растет и я вижу что теряю контроль над данными потому что можно записать / изменить в модель от куда угодно и кто угодно.
Нужен совет
Последние время уже не очень мне нравится удобства ОРМ ларавела потому что слишком много кода. сетторы, аксессоры, скопы, наблюдатели.......
Поделитесь опытом какой ОРМ поставить или же может есть какие шаблоны проектирование для этого.