Шаг номер один - заменяем в классе формы 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);
И готово!
Комментариев нет:
Отправить комментарий