2011-01-16 2 views
1

Согласно наблюдениям в Symfony 2 документации, вы должны использовать следующий PHP-код для подключения к базе данных и выполнить запрос ...Symfony 2/Doctrine - Всегда доступное соединение DB?

$conn = $this->get('database_connection'); 
$users = $conn->fetchAll('SELECT * FROM users'); 

Я полный новичок с Symfony 2, но я испытал с ООП. Мне было интересно, возможно ли иметь глобально доступную переменную $conn, доступную мне из любого пакета. Переменная $conn будет содержать значение $this->get('database_connection'), поэтому мне не нужно повторно указывать $conn = $this->get('database_connection'); каждый раз, когда я хочу сделать новый запрос.

Спасибо!

ответ

3

глобальные переменные в большинстве случаев НЕ что-то, что вы хотите в ООП. Они сбивают с толку, когда речь идет о методе, который имеет дело с несколькими переменными, и они могут быть даже скрыты локальными переменными. Для меня работа с заявлениями как

$anything = $this->get('what.the.hell.why.arent.those.identifiers.shorter'); 

как раздражает, как для вас, так что я в конечном итоге в создании одного подкласса Symfony \ Bundle \ FrameworkBundle \ Controller \ Controller для каждого проекта, который предоставляет методы, которые требуют получить с фактическими идентификаторами , В вашем случае я бы создал метод

public function getDatabaseConnection() 
{ 
    return $this->get('database_connection'); 
} 

В целом - почему вы не используете Doctrine для управления соединением DB? Большинство запросов могут быть выполнены ORM, и это способ работать с реальным объектно-ориентированным интерфейсом к базе данных. Подумайте об этом, я также играю с Symfony2/Doctrine с некоторых дней, и это действительно хорошо. Вначале это может показаться адской конфигурацией, но как только вы выполнили основные конфигурации, разработка будет очень быстрой! :)

+0

Спасибо! Я, конечно же, испытаю оба метода, чтобы увидеть, какие из них лучше всего работают. – Kieran