Это здорово, что в версии 0.4.* появилась возможность автоматического доступа к полям модели из записи в БД, без постоянного прописывания get- и set-методов в файле *.entity.php.
Однако при попытке воспользоваться новым функционалом сразу столкнулся с проблемой:
Т.к. по логике, принятой в LS, все поля записываются в базе данных с префиксом (имя модели), то и автоматические геттеры теперь требуют имени модели.
Иначе говоря, если у нас есть модуль
Test с таблицей
prefix_test и полем в таблице
test_name, то чтобы получить к нему доступ, нам нужно писать
$oTest->getTestName() вместо привычного способа
$oTest->getName(), который является логичным и удобным.
Я считаю, что необходимо ввести поддержку обоих вариантов, не только по причине неудобства варианта, который возможен сейчас, а еще и по более важной причине — совместимости.
Исторически в самом LiveStreet все методы были прописаны в *.entity.php и указывались без имени модели, например для блога —
getDescription(),
getTitle() и т.д., а никак не
getBlogDescription() и
getBlogTitle().
Подобный принцип наименования (вполне логичный и разумный) наследовали большинство модулей и плагинов, которые существуют на сегодняшний день, поэтому было бы совсем не разумно использовать половину методов (которые уже прописаны в *.entity.php) в одном виде, а другую половину, которая будет добавляться вместе с новыми свойствами моделей — в другом.
Предлагаю простой вариант, как исправить эту ошибку:
в
/engine/classes/Entity.class.php, в методе
__call()
после блока
if (isset($this->_aData[$sKey])) {
return $this->_aData[$sKey];
}
добавить блок
else {
preg_match('/Entity([^_]+)/', get_class($this), $sModulePrefix);
$sModulePrefix = strtolower($sModulePrefix[1]) .'_';
if (isset($this->_aData[$sModulePrefix . $sKey])) {
return $this->_aData[$sModulePrefix . $sKey];
}
}
На мой взгляд, это намного упростит и упорядочит работу с свойствами моделей.