|
@@ -28,11 +28,14 @@ class FormHelper extends Helper
|
|
|
|
|
|
protected $engine;
|
|
|
|
|
|
- protected $varStack = array();
|
|
|
+ protected $varStack;
|
|
|
+
|
|
|
+ protected $viewStack = array();
|
|
|
|
|
|
public function __construct(EngineInterface $engine)
|
|
|
{
|
|
|
$this->engine = $engine;
|
|
|
+ $this->varStack = new \SplObjectStorage();
|
|
|
}
|
|
|
|
|
|
public function attributes()
|
|
@@ -40,8 +43,9 @@ class FormHelper extends Helper
|
|
|
$html = '';
|
|
|
$attr = array();
|
|
|
|
|
|
- if (count($this->varStack) > 0) {
|
|
|
- $vars = end($this->varStack);
|
|
|
+ if (count($this->viewStack) > 0) {
|
|
|
+ $view = end($this->viewStack);
|
|
|
+ $vars = $this->varStack[$view];
|
|
|
|
|
|
if (isset($vars['attr'])) {
|
|
|
$attr = $vars['attr'];
|
|
@@ -120,19 +124,22 @@ class FormHelper extends Helper
|
|
|
$view->setRendered();
|
|
|
}
|
|
|
|
|
|
- return $this->render($template, array_merge($view->all(), $variables));
|
|
|
+ return $this->render($view, $template, $variables);
|
|
|
}
|
|
|
|
|
|
- public function render($template, array $variables = array())
|
|
|
+ public function render(FormView $view, $template, array $variables = array())
|
|
|
{
|
|
|
- array_push($this->varStack, array_merge(
|
|
|
- count($this->varStack) > 0 ? end($this->varStack) : array(),
|
|
|
+ $this->varStack[$view] = array_replace(
|
|
|
+ $view->all(),
|
|
|
+ isset($this->varStack[$view]) ? $this->varStack[$view] : array(),
|
|
|
$variables
|
|
|
- ));
|
|
|
+ );
|
|
|
+
|
|
|
+ array_push($this->viewStack, $view);
|
|
|
|
|
|
- $html = $this->engine->render($template, end($this->varStack));
|
|
|
+ $html = $this->engine->render($template, $this->varStack[$view]);
|
|
|
|
|
|
- array_pop($this->varStack);
|
|
|
+ array_pop($this->viewStack);
|
|
|
|
|
|
return $html;
|
|
|
}
|