Php 在Symfony2+中自动加载一个简单DAO;推进
我一直在做一个项目,我觉得有一些DAO是个好主意,但要简化 基本上,我想从中得到的唯一东西(至少现在)是按模型名和id获取对象。我编写了这段非常简单的代码: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)) {
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的方式:)