gpt4 book ai didi

php - 具有多个对象和字段集的 ZF2 Form Hydration

转载 作者:搜寻专家 更新时间:2023-10-31 21:34:19 25 4
gpt4 key购买 nike

我正在努力尝试找出如何使用单一表单编辑多个模型。

我有一个名为 Teams 的数据库表和一个与该表关联的学说实体。我创建了一个表单,如下所示:

我的团队现场集:

class TeamFieldset extends AbstractFieldset implements InputFilterProviderInterface
{
public function init()
{
$this->setName('Team')
->setHydrator(new DoctrineHydrator($this->getObjectManager(),'Application\Model\Entities\Team'))
->setObject(new Team())
->setLabel('Team');

$this->add(array(
'type' => 'Hidden',
'name' => 'id',
));

$this->add(array(
'name' => 'name',
'options' => array(
'label' => 'Team name',
),
));

// …. more fields go here
}


/**
* Implement InputFilterProviderInterface
*/
public function getInputFilterSpecification()
{
// …. input filter implementation goes here.
}
}

我的团队形式:

class TeamForm extends AbstractAdminForm
{
public function init()
{
parent::init();

$this->setName('team-form')
->add(array(
'type' => 'TeamFieldset',
'name' => 'Team',
'options' => array(
'use_as_base_fieldset' => true,
),
)
);

$this->add(array(
'name' => 'submit',
'options' => array(
'label' => 'Save Team',
),
'attributes' => array(
'class' => 'btn-primary',
'type' => 'submit',
),
));
}
}

在我的 Controller 中:

public function editTeamAction()
{
$team = $this->getEntityManager()->find('Application\Model\Entities\Team',$this->params()->fromRoute('team_id'));

$formManager = $this->serviceLocator->get('FormElementManager');
$form = $formManager->get('Application\Form\Team\TeamForm');
$form->setAttribute('action',$_SERVER['REQUEST_URI']);
$form->bind($team);

$request = $this->getRequest();
if ($request->isPost()) {
$form->setData($request->getPost());
if ($form->isValid()) {
$this->getEntityManager()->persist($team);
$this->getEntityManager()->flush();
$this->redirect()->toRoute('admin/leagues/league/team',array('league_id' => $team->getLeague()->getId(),'team_id' => $team->getId()));
}
}

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

到目前为止,这一切都很好,效果很好。

现在,我还有一个遗留数据库,其中包含另一个 Teams 表。我希望用户能够通过相同的表单编辑两者。

我不对遗留数据库使用 doctrine,但这是无关紧要的,我可以很快将适当的记录拉出到一个数组中,然后为它创建一个带有数组 hydrator 的字段集。

但是,您是在表单而不是字段集上调用绑定(bind)函数。那么,如何使用表单上的这个单一绑定(bind)操作将数据绑定(bind)到每个字段集呢?

如果在字段集上有绑定(bind)操作,那将不是问题,我可以从表单中提取每个字段集并与适当的对象绑定(bind)。

如有任何指点,我们将不胜感激。

:wq

最佳答案

您可以使用 Zend\Stdlib\Hydrator\Aggregate\AggregateHydrator

The documentation

You typically want to use an aggregate hydrator when you want to hydrate or extract data from complex objects that implement multiple interfaces, and therefore need multiple hydrators to handle that in subsequent steps.

关于php - 具有多个对象和字段集的 ZF2 Form Hydration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23659946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com