Skip to content

Instantly share code, notes, and snippets.

@jenkoian
Forked from rosstuck/FormSet.php
Created April 10, 2014 08:01
Show Gist options
  • Save jenkoian/10354021 to your computer and use it in GitHub Desktop.
Save jenkoian/10354021 to your computer and use it in GitHub Desktop.
<?php
$formset = new FormSet();
$formset->addForm(
$this->createForm('form_1', $foo),
function($form) use ($commandBus) {
$commandBus->execute($form->getData());
}
);
$formset->addForm(
$this->createForm('form_1', $bar),
function() {
echo 'form 2 complete, yay!';
}
);
$formset->submitRequest(new Request());
<?php
use \Symfony\Component\Form\FormInterface;
use \Symfony\Component\HttpFoundation\Request;
class FormSet
{
/**
* @var SplObjectStorage|FormInterface[]
*/
protected $forms;
public function __construct()
{
$this->forms = new SplObjectStorage();
}
public function addForm(FormInterface $form, callable $onComplete)
{
$this->forms[$form] = ['form' => $form, 'onComplete' => $onComplete];
}
public function submitRequest(Request $request)
{
$form = $this->getActiveForm($request);
if (!$form || !$form->isValid()) {
return;
}
// Invoke completed callback
$this->forms[$form]['onComplete']($form);
}
protected function getActiveForm(Request $request)
{
foreach ($this->forms as $form) {
$form->handleRequest($request);
if ($form->isSubmitted()) {
return $form;
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment