sfPropelPlugin это плагин для работы с Propel 1.3. Текущая версия 1.3.0 stable от 28/05/2008. Наткнулся на проблему при использовании виджета sfWidgetFormPropelSelect. Если указать порядок сортировки, то получаем ошибку на экран.
Например, имеем форму со следующий кодом:
class BaseNewsForm extends BaseFormPropel { public function setup() { $this->setWidgets(array( 'news_id' => new sfWidgetFormInputHidden(), 'category_id' => new sfWidgetFormPropelSelect(array('model' => 'NewsCategory', 'method' => 'getName', 'order_by' => array('Name', 'asc'))), 'title' => new sfWidgetFormInput() ));
Сортировка по полю «Name» не получиться, т.к. есть баг в коде. Плагин давно не обновляли, но в репозитории есть свежий код, и эта проблема решена, чтобы получить плагин из SVN, выполните следующую команду:
svn co http://svn.symfony-project.com/plugins/sfPropelPlugin/branches/1.3/ .
Учтите все это делаете на свой страх и риск, т.к. это не релиз.
Кстати, если не переназначить опцию «method» своим методом, то по умолчанию будет использоваться метод __toString, которого нет в сгенерированных формах. В этом случае получим на экран сообщение об ошибке
Class "NewsCategory" must implement a "__toString" method to be rendered in a "sfWidgetFormPropelSelect" widget
Альтернативным решением будет добавление метода __toString в NewsCategory.php
function __toString() { return $this->getName(); }
Февраль 17th, 2009 at 09:40
Данная проблема могла быть решена проще — можно самостоятельно вытащить набор данных и поступить (например) так
$c = new Criteria();
$myTmpList = CategoriesPeer::doSelect($c);
$myCategories = array();
foreach ($myTmpList as $v){
$myCategories[$v->getId()] = $v->getTitle();
}
и далее:
$this->setWidgets(array(
‘categories_id’ => new sfWidgetFormSelect(array(‘choices’=>$myCategories)),
и для валидации прописываем правило:
$this->setValidators(array(
‘categories_id’ => new sfValidatorChoice(array( ‘choices’ => array_keys ( $myCategories ))),
В целом симфони очень гибкий предмет — всегда практически можно сказать «а мы пойдем другим путём», за что и любимый фреймворк ))
Февраль 17th, 2009 at 09:41
Дополнительно — понятное дело что можно указать не обязательно ID для элемента SELECT и через критерии организовать сортировку в любом направлении
Февраль 17th, 2009 at 11:56
Все верно, сам пользуюсь предложенным Вами вариантом, с использованием виджета sfWidgetFormSelect. Спасибо им за гибкость