Добавление функциональности к нескольким базовым классам в Propel - PullRequest
1 голос
/ 19 августа 2011

У меня есть группа классов одноранговых моделей, которые должны иметь одинаковые функции.Вместо того, чтобы копировать и вставлять каждый раз, когда я добавляю новый в группу, я бы скорее добавил функции к классу, который расширяют классы одноранговых моделей.К сожалению, поскольку классы одноранговых моделей расширяются от базовых классов, таких как 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?

1 Ответ

0 голосов
/ 26 августа 2011

Вместо того, чтобы копировать и вставлять каждый раз, когда я добавляю новый в группу, я бы лучше добавил функции к классу, который расширяют классы одноранговых моделей.

Правильный способ - определить Поведение Propel

...