Php 在Symfony 1.4中,如何将一种方法用于多个推进模型?
我有一个方法可以按照参数中指定的顺序从数据库中的表中获取所有行:Php 在Symfony 1.4中,如何将一种方法用于多个推进模型?,php,symfony1,symfony-1.4,propel,Php,Symfony1,Symfony 1.4,Propel,我有一个方法可以按照参数中指定的顺序从数据库中的表中获取所有行: public static function getAllOrderedBy($orders = null) { $criteria = new Criteria(); if(is_array($orders)) { foreach($orders as $column => $order) {
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)
,但还有其他一些问题,我只是不想将此代码复制到它所使用的每个模型中。有两种方法可以实现这一点
- 推动观察者。您可以通过
staticMethods()
- Symfony Mixins。它们记录在symfony 1.0的最终指南中。看见在本指南的较新版本中,关于mixin的信息已被删除,但sfMixer类的代码似乎尚未更改(和)
推进行为“peerplus”未注册
。我将这个新类放在项目文件夹lib/behavior/peerplusbeavior.php文件中,并在spreep.ini的末尾添加了下一行:spreep.behavior.peerplus.class=lib.behavior.peerplusbeavior
。当然,在需要的地方也将该行为添加到schema.yml中。我做错了什么?好的,找到了错的地方。在schema.yml中,您必须使用\u推进\u行为
而不仅仅是\u行为
,并在下面列出行为。此外,您必须在您的行为类中扩展SfPropelBehaviorBase
(而不是简单的Behavior
),此后一切正常。谢谢你的帮助!