Автозагрузка простого DAO в Symfony2 + Propel

Я работал над проектом и решил, что было бы неплохо иметь что-то вроде DAO, но упрощенное.

По сути, единственное, чего я хочу от этого (по крайней мере, сейчас), это выбрать мне объекты по названию модели и идентификатору. Я написал этот очень простой кусок кода:

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;

}

}

Однако я застрял с реализацией. Я думаю, мне нужно как-то автозагрузить его, чтобы он мог проверять существование классов и чтобы я мог использовать его где-нибудь внутри моего приложения, но я не знаю как. Может кто-нибудь мне помочь? Или, если есть лучший способ сделать это, я буду признателен за любой вклад.

2

Решение

То, что вы ищете, это Service,

Определение из документация:

Проще говоря, Сервис — это любой объект PHP, который выполняет какую-то
«глобальная» задача. Это целенаправленное имя, используемое в компьютере
наука, чтобы описать объект, который создан для конкретной цели
(например, доставка электронной почты). Каждый сервис используется на протяжении всего вашего
приложение, когда вам нужна конкретная функциональность, которую он предоставляет.

Определить ваш класс как сервис так же просто, как это:

приложение / Config / config.yml

...
services:
my_dao:
class:        Your\Bundle\DAO
...

Теперь вы можете получить доступ DAO в ваших контроллерах делают что-то вроде этого:

$dao = $this->get('my_dao');

Когда вы делаете этот звонок, Service Container создаст экземпляр вашего класса и вернет его. Всегда будет не более одного экземпляра (singleton), и если он никогда не вызывается, он даже не будет создан.

Я рекомендую прочитать документация.

мнение

Кажется, у вас проблемы с адаптацией к Путь Symfony.

Если вы посмотрите на Книга вы увидите, что Entity Manager в сочетании с вашей организацией Repository справиться с большей частью того, что DAOТрадиционно сделал. Другими словами, вам действительно не нужно DAO учебный класс.

Например, выбор любого объекта id так же просто, как:

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

В любом случае, если вы особенно любите такой подход, вы можете попробовать этот проект.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]