如何在Symfony 1.4中使用一种方法和几个Propel模型?

时间:2011-04-25 06:33:51

标签: php symfony1 symfony-1.4 propel

我有一种方法,可以使用参数中指定的顺序从数据库中的表中获取所有行:

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类中进行,但我想将其用于多个模型,例如LinkPeerSubjectPeer。 我可以将这个代码从一个模型复制并粘贴到另一个模型,但是我想问一下是否有更好的方法可以让这个方法适用于所有这些类?

如果使用情况发生变化,这不是问题,因此我不会调用PagePeer:getAllByOrder(PagePeer::TITLE)而是其他内容,我只是不想将此代码复制到它所使用的每个模型中。

1 个答案:

答案 0 :(得分:1)

有两种方法可以实现这一目标。

  • 推动行为。文档states,您可以通过staticMethods()
  • 向对等类添加静态方法
  • Symfony Mixins。它们记录在The Definitive Guide to symfony 1.0中。见Chapter 17 - Extending Symfony。在本指南的较新版本中,删除了有关mixins的信息,但似乎sfMixer类的代码尚未更改(sfMixer in sf1.0sfMixer in sf1.4