Prosím o otestování nový verzí Application & spol
- David Grudl
- Nette Core | 8218
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 | 493
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 | 100
@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 | 8218
@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 | 493
@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 | 1260
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
- dakur
- Člen | 493
@DavidGrudl composer už ok.
Kde to ještě padá:
TextBase::__construct()
– přibylostring|\Stringable|null
v prvním parametruBaseControl::setDisabled()
– přibyl return typestatic
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 | 8218
Proč to padá na tom konstruktoru? Tam by přece žádná vazba na rodičovský konstruktor být neměla, ne?
- dakur
- Člen | 493
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 :)
- Pavel Kravčík
- Člen | 1194
@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 | 1194
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 = [];