В одной из моих форм я хотел бы иметь выпадающий список (sfWidgetFormChoice), где параметры генерируются динамически, выполняя запрос в базе данных.Как заполнить виджет выбора Symfony динамически с результатом запроса БД
Чтобы быть более точным, я собираюсь перечислить все версии, которые у меня есть в таблице. Запрос выглядит примерно так:
select distinct version from mytable order by version desc
То, что я до сих пор, но не работает:
class myForm extends sfForm
$query = "select distinct version from mytable order by version desc";
$versions = Doctrine_Manager::getInstance()->getCurrentConnection()->fetchAssoc($query);
public function configure()
$this->setWidgets(array('version' => new sfWidgetFormChoice(array('choices' => self::$versions))));
Edit:
Thansk ребята за ваши ответы! Очень признателен!
В любом случае ваши решения основываются на модели стола. Я бы предпочел иметь PDO напрямую, поскольку это быстрее.
В Symfony Documentation Я нашел то, что искал в разделе «Использование исходных SQL-запросов».
Так что я продлил свою форму, чтобы закончить с этим:
class myForm extends sfForm
{
public function getVersions()
{
$connection = Doctrine_Manager::connection();
$query = "select distinct version from mytable order by version desc";
$statement = $connection->prepare($query);
$statement->execute();
$resultset = $statement->fetchAll(PDO::FETCH_COLUMN, 0);
return $resultset;
}
public function configure()
{
$this->setWidgets(array('version' => new sfWidgetFormChoice(array('choices' => self::getVersions()))));
}
}
В результате этого моего выпадающего списка получает правильно заполнен, что в моем столе, яй! НО я получаю также предупреждения:
Warning: Invalid argument supplied for foreach() in lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/database/sfDoctrineConnectionProfiler.class.php on line 196
Warning: join() [function.join]: Invalid arguments passed in lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/database/sfDoctrineConnectionProfiler.class.php on line 141
Warning: Invalid argument supplied for foreach() in lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/database/sfDoctrineConnectionProfiler.class.php on line 196
Warning: Invalid argument supplied for foreach() in lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/debug/sfDoctrineConnectionProfiler.class.php on line 117
Любая идея, что я делаю неправильно здесь ??? Как ни странно, выпадающее меню выглядит отлично.
Это действительно очень плохое использование форм и виджета, и это вовсе не MVC. 'sfWidgetFormDoctrineChoice' с пользовательским запросом - это, безусловно, путь. – DevAntoine