Php 在Symfony2+中自动加载一个简单DAO;推进

Php 在Symfony2+中自动加载一个简单DAO;推进,php,symfony,propel,symfony-2.3,Php,Symfony,Propel,Symfony 2.3,我一直在做一个项目,我觉得有一些DAO是个好主意,但要简化 基本上,我想从中得到的唯一东西(至少现在)是按模型名和id获取对象。我编写了这段非常简单的代码: class DAO { public static function get($className,$id) { $queryName = $className."Query"; if (!class_exists($className) || !class_exists($queryName)) {

我一直在做一个项目,我觉得有一些DAO是个好主意,但要简化

基本上,我想从中得到的唯一东西(至少现在)是按模型名和id获取对象。我编写了这段非常简单的代码:

class DAO {

  public static function get($className,$id) {
    $queryName = $className."Query";
    if (!class_exists($className) || !class_exists($queryName)) {
        return false;
    }       

    $q = $queryName::create()->filterByID($id)->find();
    return $q;

}

}

然而,我发现自己被这个实现卡住了。我想我需要以某种方式自动加载它,这样它就可以检查类的存在,这样我就可以在我的应用程序中的任何地方使用它,但我不知道怎么做。有人能帮我吗?或者,如果有更好的方法,我将感谢您的任何意见。

您需要的是
服务

来自以下方面的定义:

简单地说,服务是任何执行某种类型服务的PHP对象 “全球”任务。这是一个专门用于计算机的通用名称 描述为特定目的而创造的物体的科学 (如发送电子邮件)。每个服务都在您的整个过程中使用 应用程序,无论何时需要它提供的特定功能

将类定义为服务非常简单:

app/config/config.yml

...
services:
    my_dao:
        class:        Your\Bundle\DAO
...
现在,您可以在控制器中访问
DAO
,操作如下:

$dao = $this->get('my_dao');
进行此调用时,
服务容器将创建类的实例并返回它。最多只会有一个实例(单例),如果从未调用过,它甚至不会被实例化

我建议你读这本书

意见 似乎您在适应Symfony方式方面遇到了困难

如果您查看一下,就会发现
实体管理器
与实体的
存储库
一起处理了
DAO
传统上所做的大部分工作。换句话说,实际上不需要使用
DAO

例如,通过
id
获取任何对象非常简单:

$om->getRepository('YourBundle:YourModel')->find($id);

无论如何,如果您特别喜欢这种方法,您可能想试试project。

谢谢!我还不熟悉symfony的方式:)