Как я могу использовать один метод с несколькими моделями Propel в Symfony 1.4? - PullRequest
0 голосов
/ 25 апреля 2011

У меня есть метод для получения всех строк из таблицы в базе данных в порядке, указанном в аргументах:

public static function getAllOrderedBy($orders = null)
    {
        $criteria = new Criteria();
        if(is_array($orders))
        {
            foreach($orders as $column => $order)
            {
                if($order == 'asc')
                {
                    $criteria->addAscendingOrderByColumn($column);
                }
                else if($order == 'desc')
                {
                    $criteria->addDescendingOrderByColumn($column);
                }
            }
        }
        else if($orders != null)
        {
            $criteria->addAscendingOrderByColumn($orders);
        }
        return self::doSelect($criteria);
    }

Этот метод применяется в классе PagePeer, но я хочу использовать его с несколькими моделями, такими как LinkPeer или SubjectPeer. Я мог бы скопировать и вставить этот код из одной модели в другую, но я хочу спросить, есть ли лучший способ сделать этот метод доступным для всех этих классов?

Это не проблема, если использование изменится, поэтому я не буду звонить PagePeer:getAllByOrder(PagePeer::TITLE), но что-то еще, я просто не хочу копировать этот код в каждую модель, в которой он используется.

1 Ответ

1 голос
/ 25 апреля 2011

Есть два способа сделать это.

  • Продвигать зрителей.Документация гласит , что вы можете добавить статический метод к вашим классам одноранговых устройств через staticMethods()
  • Symfony Mixins.Они были задокументированы в The Definitive Guide to symfony 1.0.См. Глава 17 - Расширение Symfony .В более поздних версиях этого руководства информация о миксинах была удалена, но кажется, что код класса sfMixer не изменился ( sfMixer в sf1.0 и sfMixer в sf1.4 )
...