ZF2 : 来自路由的参数在提交表单后被清除

Posted

技术标签:

【中文标题】ZF2 : 来自路由的参数在提交表单后被清除【英文标题】:ZF2 : paramaters coming from route are cleared after submitting a form 【发布时间】:2013-05-28 09:30:31 【问题描述】:

我正在使用AbstractTableGatewayHydratingResultset 进行数据库操作。 (使用 BjyProfiler) 当我使用添加操作发布表单数据时,它可以工作,但编辑操作不起作用。当我进行绑定时,它可以工作,但我被重定向到添加页面,因为提交表单会重置来自路由的参数。

这是我的 editAction() 代码(与 Album 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();
    
[...]

有人可以帮助我吗?我该如何解决这个问题?谢谢。

【问题讨论】:

您是否真的在视图中设置了表单操作属性?如果您的路线与教程相似,您应该在 edit.phtml 中有类似 <?php $form->setAttribute('action', $this->url('voyage', array('id' => $id, 'action' => 'edit'))); ?> 的内容,我猜您缺少 id 参数。 是的,我像你一样设置它<h1><?php echo $this->escapeHtml($title); ?></h1> <?php $form = $this->form; $form->prepare(); $form->setAttribute('action', $this->url('voyage', array('action' => 'edit'))); $form->setAttribute('method', 'post'); echo $this->form()->openTag($form);?>... 我在提交之前会获取操作 ID,因为当我们单击编辑按钮时绑定功能起作用。但是当我提交表单时,我丢失了将我重定向到添加页面的 id。 您在$form->setAttribute('action', $this->url('voyage', array('action' => 'edit'))); 这一行中缺少'id' => $id 键/值对。请参阅我之前的评论。 是的,你是对的,它现在可以工作了 :) 非常感谢。 【参考方案1】:

您需要告知表单有关水合器的信息,因为 ClassMethods 不是默认的

 $form->setHydrator(new ClassMethods());

【讨论】:

感谢您的回复。问题得到解决。见 cmets。

以上是关于ZF2 : 来自路由的参数在提交表单后被清除的主要内容,如果未能解决你的问题,请参考以下文章

检索表单时更改 ZF2 表单行为

如何在Vue中提交表单,重定向到新路由并传递参数?

React Hook Form - 在不清除表单的情况下重置“isDirty”?

如何在表单提交时将参数发送到路由

在 laravel 中通过 ajax 提交简单的表单,之后,将新行插入到现有表中,其中包含来自提交表单的数据

提交表单时使用路由参数传递变量Laravel 5.2