Prosím o otestování nový verzí Application & spol

David Grudl
Nette Core | 8074
+
+8
-

Prosím o otestování nových verzí

composer require nette/application:^3.2.x-dev nette/forms:^3.2.x-dev nette/http:^3.3.x-dev nette/component-model:^3.1.x-dev

Tyto verze přinášejí kvalitativní posun v tom, že využívají PHP 8.1 a všechny jeho novinky. Především jde o doplněné typehinty. Neměly by způsobit žádný BC break, jen v několika málo situacích vyhazují deprecated noticky, viz release notes na githubu.

dakur
Člen | 489
+
0
-

Díky za práci na nových RC.

Pokud mám vlastní form fieldy extendující ty existující, pak to hází Compile Error, protože přibyly return types.

Taky zmizelo PresenterFactory::unformatPresenterClass(), jak už jsem řešil zde. Buď si ji tam teda budu muset přidat sám (hodně volatile), nebo si napsat vlastní presenter mapper.

Editoval dakur (25. 1. 12:05)

Václav Pávek
Backer | 96
+
0
-

@DavidGrudl můžeš mi prosím odpovědět, proč není PresenterFactory::unformatPresenterClass() spolehlivé? Viz. https://forum.nette.org/…lication-3-1#…

David Grudl
Nette Core | 8074
+
0
-

@dakur zkusil jsem je dát pryč. Narážíš teď na nějaký konflikt?

@VáclavPávek už si nepamatuju u čeho to konkrétně selhává…

dakur
Člen | 489
+
0
-

@DavidGrudl Teď to padá už na composeru:

  Problem 1
    - Root composer.json requires nette/application ^3.2.x-dev -> satisfiable by nette/application[v3.2.x-dev].
    - nette/application v3.2.x-dev conflicts with nette/forms v3.2.x-dev.
    - Root composer.json requires nette/forms ^3.2.x-dev -> satisfiable by nette/forms[v3.2.x-dev].

Nepomůže ani ručně změnit nette/forms na 3.2.x-dev as 3.3.0

Asi za to může tento commit: https://github.com/…26086d240940 nette/forms 3.3 ani neexistuje, ne?

Editoval dakur (1. 2. 8:38)

Marek Bartoš
Nette Blogger | 1127
+
+1
-

Ten conflict se musí změnit na správnou verzi, žádnou option se bohužel ignorovat nedá.

unformatPresenterClass() taky používám a nikdy jsem na problém nenarazil.
Nehlásil to třeba někdo, kdo měl custom mapping? Třeba librette/presenter-factory mohlo být problém, protože řeší format, ale unformat ne https://github.com/…ormatter.php

David Grudl
Nette Core | 8074
+
0
-

@dakur opraveno

dakur
Člen | 489
+
0
-

@DavidGrudl composer už ok.

Kde to ještě padá:

  • TextBase::__construct() – přibylo string|\Stringable|null v prvním parametru
  • BaseControl::setDisabled() – přibyl return type static

Pak mi ještě padá vlastní template factory, která dědí z Nette\Bridges\ApplicationLatte\TemplateFactory, konkrétně na return typu createTemplate(), protože tam předtím žádný nebyl a já měl uvedený Nette\Application\UI\Template.

David Grudl
Nette Core | 8074
+
0
-

Proč to padá na tom konstruktoru? Tam by přece žádná vazba na rodičovský konstruktor být neměla, ne?

dakur
Člen | 489
+
0
-

Máme uvedený konstruktor v traitě jako abstract, protože v té traitě máme statický pojmenovaný konstruktor addTo(), který ten hlavní volá. A protože je to traita, tak nezná kontext, abstraktní konstruktor tedy slouží, aby new static($caption) v IDE ukazovalo správně parametry (phpstan by si s tím měl asi poradit i bez toho).

trait AddToFormUsabilityConstructorForTextBase
{

	abstract public function __construct($caption = null);

	public static function addTo(Form $form, string $name, ?string $caption = null, ?string $insertBefore = null): static
	{
		$form->addComponent($input = new static($caption), $name, $insertBefore);
		return $input;
	}

}

final class MyTextInput
{
	use AddToFormUsabilityConstructorForTextBase;

	// ...
}

MyTextInput::addTo($form, 'myTextInput')
	->setDefaultValue('...')
	// ...
;

Asi to není úplně běžné použití, tak záleží, kde leží hrana BC breaku :)

dakur
Člen | 489
+
0
-

Jo a ty return typy ve forms jsi odstranil v BaseControl, ale pořád jsou v potomcích :)

Editoval dakur (14. 2. 9:34)

Pavel Kravčík
Člen | 1178
+
0
-

@DavidGrudl: Je nějaký důvod proč musí být final class ControlGroup? Používáme nadstavbu nad formuláři a ControlGroup si rozšiřujeme o parametry navíc pro naše automatické vykreslení přes BS5 (duplikátory, dependendy, whisperery apod.). Ve verzi 3.2 už nefunguje.

Když to zjednoduším na příklad:

class ControlGroup extends \Nette\Forms\ControlGroup
{
	protected ?string $class = null;

	public function setColor(string $color): self
	{
		return $this->setOption('color', $color);
	}
}

// Následná nadstavba

pf renderForm()
if($groupTitle || $this->getTitle())
{
	$groupColor = $group->getOption('color') ? ' ' . $group->getOption('color') : null;

	$carHeader = Html::el('div')
		->class('card-header' . $groupColor)
    	->setHtml($groupTitle ?: $this->getTitle());
}

// Zápis ve formuláři
pf createComponentForm(): Form
{
	...
	$form->setTitle('pes');
	$form->setColor('success');
	...
	//další barevná group apod.
	...
}
Pavel Kravčík
Člen | 1178
+
0
-

Nasadili jsme do dvou větších projektů a vypadá to ok. Kromě toho ControlGroup viz výše. Zatím jsme vyřešili pomocí composer patch, kdy to final mažeme. Třeba někomu pomůže.

diff --git a/src/Forms/ControlGroup.php b/src/Forms/ControlGroup.php
index 974e862..215a5c6 100644
--- a/src/Forms/ControlGroup.php
+++ b/src/Forms/ControlGroup.php
@@ -15,7 +15,7 @@
 /**
  * A user group of form controls.
  */
-final class ControlGroup
+class ControlGroup
 {
 	protected \WeakMap $controls;
 	private array $options = [];

savalo
Člen | 5
+
+1
-

Ja bych zase uvital dat final pryc u nette/application/src/Application/LinkGenerator.php a hlavne u metody isLoggedIn() v nette/security/src/Security/User.php kde musim mit patch jenom kvuli tomu final.