nextras/forms

Undefined variable: _form

khorsky opened this issue · 5 comments

Při aktualizaci jednoho staršího projektu na Nette 2.4 jsem narazil s vlastními komponentami, založenými na Nextras\Forms\ComponentControl.

Zjednodušený kód:

class PublishingControl extends ComponentControl
{
	public function __construct($caption = NULL)
	{
		parent::__construct($caption);
		$this['draft'] = new Checkbox('Uložit draft, zatím nepublikovat');
		$this['datePublish'] = new DatePicker('Datum zveřejnění');
	}
}

šablona:

<div class="form-group">
	<div class="checkbox">
		{input draft}
	</div>
</div>
<div id="{$toggleId}" class="form-group">
	{label datePublish class => "control-label" /}
	{input datePublish}
</div>

Nevím, zda tohle nějak nesouvisí s #49 . Pokud změním $_form na $form, změní se i hláška na "undefined variable: form".

"nextras/forms": "^2.0.1",
"nette/forms": "^2.4.6",
"latte/latte": "^2.4.6",

V configu:
extensions:
nextras.form: Nextras\Forms\Bridges\NetteDI\FormsExtension

latte:
macros:
- Nextras\Forms\Bridges\Latte\Macros\BS3InputMacros

Pokud vypnu BS3InputMacros, nic se nezmění. Pokud neaktivuju rozšíření nextras, dostanu end() expects parameter 1 to be array, null given

Verze 1.6.2 ve spojení s 2.3.x Nette fungovala podle očekávání.

Vypadá to na problém v makru, které vypisuje prvky do šablony. V proměných, které jsou šabloně prvku k dispozici, žádný $form není.

Minimální kód:

// MyControl.php

use Nextras\Forms\ComponentControl;
use Nextras\Forms\Controls\DatePicker;

class MyControl extends ComponentControl
{

  public function __construct($caption = NULL)
    {
      parent::__construct($caption);
      $this['checkbox'] = new DatePicker('My checkbox');
    }
}
<!-- MyControl.latte -->
{input checkbox}
class HomepagePresenter extends BasePresenter
{

  protected function createComponentMyForm()
    {
      $form = new Form;
      $form['myControl'] = new MyControl('My precious');

      return $form;
    }
}
<!-- šablona akce presenteru -->
{control myForm}

Unfortunately not working, I get an "end() expects parameter 1 to be array, null given" warning on line

if ($_label = end($this->global->formsStack)["checkbox"]->getLabel()) echo $_label ?>

There is no $this->global->formStack variable in the template. Cache was deleted.

Works like a charm, thanks!