Как получить доступ к базе данных из метода configure задачи Symfony - PullRequest
3 голосов
/ 06 июня 2011

Вы можете создать «задачу» Symfony, расширив sfBaseTask;см. http://www.symfony -project.org / cookbook / 1_1 / ru / tasks для получения более подробной информации.

Однако я не вижу, как настроить соединение с базой данных в разделе configure,Я хочу сделать это, чтобы у меня было свойство detailedDescription показывать некоторые параметры, которые определены только в базе данных.

Каков наилучший способ сделать это?

Ответы [ 2 ]

2 голосов
/ 08 июня 2011

Если вы посмотрите, как symfony создает пользовательский скелет задачи (./symfony generate:task yourTaskName), вы увидите код, который выглядит следующим образом, внутри функции execute:

protected function execute([..])
{
     $databaseManager = new sfDatabaseManager($this->configuration);
     $connection = $databaseManager->getDatabase($options['connection'])->getConnection();
[..]

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

protected function configure()
{
         $databaseManager = new sfDatabaseManager(sfProjectConfiguration::getApplicationConfiguration('frontend'‌​, 'prod', true));
         $connection = $databaseManager->getDatabase("the_name_of_your_connection")->getConnection();  
[..]

Затем вы можете получить доступ к своим моделям обычным способом, например:

    $myItem = Doctrine_Core::getTable('item')->find(14);
    echo $myItem->getId();
1 голос
/ 07 июня 2011

Если вы используете Doctrine, лучший способ сделать это - определить метод в файле модели php. Файлы модели находятся в /PROJECT/lib/model/doctrine/MODEL_NAMETable.class.php

Будьте осторожны с моделью MVC!

Если у вас есть собственный метод, способ его вызова: Doctrine_Core::getTable('TABLE_NAME')->miNewMethod($params-if-any);

Надеюсь, я вам помогу!

...