У меня есть группа классов одноранговых моделей, которые должны иметь одинаковые функции.Вместо того, чтобы копировать и вставлять каждый раз, когда я добавляю новый в группу, я бы скорее добавил функции к классу, который расширяют классы одноранговых моделей.К сожалению, поскольку классы одноранговых моделей расширяются от базовых классов, таких как BaseModelPeer
, это невозможно.
В Propel 1.5 добавлен атрибут basePeer , который позволяет установить BaseModelPeer
простираться от данного класса.Однако по умолчанию класс BaseModelPeer
не расширяется ни от чего.Вместо этого он просто делает все свои вызовы к классу BasePeer
, который имеет разные сигнатуры для своих функций.Изменяя атрибут basePeer
, BaseModelPeer
расширяется от вашего нового класса, назовем его NewBasePeer
и изменяет вызовы с BasePeer
на NewBasePeer
.Однако, поскольку подписи различаются, это просто приводит к его развалу!
Я на самом деле пытаюсь следовать учебнику Symfony Zend Lucene , перемещая некоторые функции, которые делают элементы индексируемыми, вэто NewBasePeer
класс.Одна из этих функций doDeleteAll
.Подпись BaseModelPeer для этой функции выглядит следующим образом:
public static function doDeleteAll($con = null)
Но внутри этой функции она делает такой вызов:
$affectedRows += BasePeer::doDeleteAll(ModelPeer::TABLE_NAME, $con, ModelPeer::DATABASE_NAME);
Поскольку BaseModelPeer не расширяется BasePeer
, это нормально,Но, изменив атрибут basePeer
в схеме, вызов функции изменится на:
$affectedRows += NewBasePeer::doDeleteAll(ModelPeer::TABLE_NAME, $con, ModelPeer::DATABASE_NAME);
BaseModelPeer
теперь расширяет NewBasePeer
, то есть для переопределения вызова на doDeleteAll()
им нужноидентичные подписи.Очевидно, класс BaseModelPeer
теперь противоречит сам себе!
Это ошибка с Propel?Если нет, то как использовать атрибут basePeer
?