Шаг номер один - заменяем в классе формы Name Format:
$this->setNameFormat('s_%s');Затем - самое сложное. Когда Name Format представлен в виде PHP-массива (с квадратными скобками), то получается легко и просто сделать bind параметров для этой формы. Нам же придется предварительно разобрать $request и вытащить оттуда все поля формы, и собрать их в массив, чтобы передать в $form->bind(). Для этого напишем метод, который поместим в класс экшенов:
static private function getParametersForForm(sfWebRequest $request,$pattern) { $pattern='@^'.str_replace('%s','(.*?)',$pattern).'$@'; $result=array(); $parameters=$request->getGetParameters(); foreach ($parameters as $name=>$value) { if (preg_match($pattern,$name,$match)) { $result[$match[1]]=$request->getParameter($name); } } return $result; }
$pattern в списке аргументов - это не что иное, как Name Format формы.
Остается немного подправить bind:
$params=self::getParametersForForm($request,$form->getWidgetSchema()->getNameFormat()); $form->bind($params);
И готово!
Комментариев нет:
Отправить комментарий