ZF2: параметры, поступающие с маршрута, очищаются после отправки формы

Я использую AbstractTableGateway а также HydratingResultset делать операции БД. (с BjyProfiler), когда я публикую свои данные формы с действием добавления, оно работает, но действие редактирования не работает. когда я делаю привязку, это работает, но я перенаправлен на страницу добавления, потому что отправка формы сбрасывает параметры, поступающие с маршрута.

вот мой код для editAction() (то же самое с альбомом editAction())

        $id = (int)$this->params()->fromRoute('id');
        if (!$id) {
            return $this->redirect()->toRoute('voyage', array('action'=>'add'));
        }
        $voyage = $this->getVoyageTable()->getVoyage($id);

        $form = new VoyageForm($this->getTypeVoyageTable());
        $form->bind($voyage);
        $form->get('submit')->setAttribute('value', 'Edit');

        $request = $this->getRequest();
        if ($request->isPost()) {
            $form->setData($request->getPost());
            if ($form->isValid()) {
                $this->getVoyageTable()->saveVoyage($voyage);

                // Redirect to list of voyages
                return $this->redirect()->toRoute('voyage');
            }
        }

        return array(
            'id' => $id,
            'form' => $form,
        );
    }

и мой стол:

class VoyageTable extends AbstractTableGateway
{
    protected $table ='voyages';

    public function __construct(Adapter $adapter)
    {
        $this->adapter = $adapter;
        $this->resultSetPrototype = new HydratingResultSet();
        $this->resultSetPrototype->setObjectPrototype(new Voyage());
        $this->initialize();
    }
[...]

Может ли кто-нибудь помочь мне? Как я могу решить эту проблему? Благодарю.

1 ответ

Вам необходимо сообщить форму о гидраторе, так как ClassMethods не используется по умолчанию

 $form->setHydrator(new ClassMethods());
Другие вопросы по тегам