Php Symfony2:如何添加应用程序范围的条令自定义方法?
我无意中发现了一条新路 OP询问他如何使用Doctrine2本机不支持的Php Symfony2:如何添加应用程序范围的条令自定义方法?,php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,我无意中发现了一条新路 OP询问他如何使用Doctrine2本机不支持的限制标准调用findAll()。公认的答案明智地建议他查看此方法的源代码,我们从中了解到,findAll()只不过是使用特定参数调用findBy() 因此,可以通过直接调用findAll()来调用限制为13的findAll(): findBy(array(), array('id' => 'DESC'), 13); 但在阅读代码时,最后一条指令并不像下面这样的调用那样简单: findAllWithLimit(13);
限制
标准调用findAll()
。公认的答案明智地建议他查看此方法的源代码,我们从中了解到,findAll()
只不过是使用特定参数调用findBy()
因此,可以通过直接调用findAll()
来调用限制为13的findAll()
:
findBy(array(), array('id' => 'DESC'), 13);
但在阅读代码时,最后一条指令并不像下面这样的调用那样简单:
findAllWithLimit(13);
我的问题是:如果我想让这个方法应用广泛,它应该属于哪里?
public function findAllWithLimit($limit)
{
return $em->findBy(array(), array('id' => 'DESC', $limit);
}
第一个解决方案(灵活性较低/超级简单)
您需要覆盖config.yml中的默认存储库类,并创建自己的存储库类
让我们创建您自己的基本存储库类:
namespace My\BaseBundle\Repository; // you will want to change
use Doctrine\ORM\EntityRepository as BaseEntityRepository;
class EntityRepository extends BaseEntityRepository
{
public function findAllWithLimit($limit) {
// your logic
}
}
然后在config.yml文件中定义实体管理器的默认实体存储库
doctrine:
orm:
entity_managers:
default: # you will have to figure out what the value is in your config.yml file
default_repository_class: My\BaseBundle\Repository\EntityRepository # make sure to put the proper namespace
有关Symfony中的更多条令选项,请查看
第二种解决方案(最灵活/最长的)
您可以创建自己的存储库,并让它扩展自己的基本存储库类
例如,您自己的基本存储库类是:
namespace My\BaseBundle\Repository;
use Doctrine\ORM\EntityRepository as BaseEntityRepository;
class EntityRepository extends BaseEntityRepository
{
public function findAllWithLimit($limit) {
// your logic
}
}
而每个存储库类的外观如下所示:
namespace My\AwesomeBundle\Repository;
use My\BaseBundle\Repository\EntityRepository;
class DogRepository extends EntityRepository
{
}
然后定义Dog
实体,使其指向DogRepository
类。我给你的文档应该教你怎么做
此解决方案需要更多的代码,但会使代码更干净,因为它允许将存储库调用拆分为方法
希望有帮助 谢谢!你的回答非常有用。