Upgrade Dibi a Texy
Databázová vrstva Dibi od verze 4.1 a Texy od verze 3.0 přejmenovaly třídy, konstanty a parametry a část
API zrušily bez náhrady. Balíček dresscode/upgrade-deegee ty změny nese: DressCode podle něj přepíše
insertId() na getInsertId(), Type::DATETIME na Type::DateTime i volání
pomocných metod Texy, které se přestěhovaly do Texy\Helpers, a u zrušeného API řekne, co dál.
Instalace
composer require --dev dresscode/upgrade-deegee phpstan/phpstan
vendor/bin/dresscode upgrade today
Druhý řádek už kód přepíše: upgrade today vezme data balíčku sám, bez konfigurace, a styl kódu nechá,
jak je. Postup a co dělat s tím, co zbude, popisuje Upgrade kódu.
Staré API pohlídá i každodenní kontrola, když konfigurace přidá typy a sadu deprecations, viz Jak funguje upgrade knihoven:
typeAnalysis: phpstan
use:
- perCs # váš standard
- deprecations
Co se opraví
Repozitář psaný pro Dibi 4 a Texy 3.1 v projektu na současných verzích:
public function insert(array $data): int
{
$this->db->query('INSERT INTO articles', $data);
return $this->db->insertId(); // Method `Dibi\Connection::insertId()` is replaced by `Connection::getInsertId()`.
}
public function render(string $text): string
{
$html = $this->texy->process($text);
return $this->texy->unProtect($html); // Method `Texy\Texy::unProtect()` is replaced by `Texy::unprotect()`.
}
public function getColumnType(): string
{
return Type::DATETIME; // Constant `Dibi\Type::DATETIME` is replaced by `Type::DateTime`.
}
Po dresscode upgrade today:
public function insert(array $data): int
{
$this->db->query('INSERT INTO articles', $data);
return $this->db->getInsertId();
}
public function render(string $text): string
{
$html = $this->texy->process($text);
return $this->texy->unprotect($html);
}
public function getColumnType(): string
{
return Type::DateTime;
}
Z Dibi se opraví konstanty Dibi\Type, Fluent a ovladačů dřív psané velkými písmeny,
konstanty statické fasády dibi (dibi::AFFECTED_ROWS na Dibi\Fluent::AffectedRows),
affectedRows() a insertId() na getAffectedRows() a getInsertId()
i u fasády, Dibi\DateTime::modifyClone($modify) na modify($modify), DibiExtension22 na
DibiExtension3 a konstruktory FileLogger a Panel s filtrem null. Z Texy
třídy s předponou Texy na jmenný prostor Texy\, pomocné metody Texy a
Utf přesunuté do Texy\Helpers, escapeHtml() na htmlspecialchars(),
unescapeHtml() na Texy\Helpers::unescapeHtml() a v projektu na Texy 3.0 až 3.1.0 na
html_entity_decode(), vlastnost $cleaner na $htmlOutputModule, konstanty
HtmlElement a přejmenované parametry Modifier.
Co zůstane na vás
Kde náhrada není, DressCode místo ohlásí a řekne, co dělat dál. Třeba metodu translateArgs(), kterou Dibi
4.2 zrušilo, nebo výstupní režimy, které Texy už nemá:
Method `Dibi\Connection::translateArgs()` is forbidden: there is no replacement; the hook is gone; the SQL is generated by `translate()`, which is final and takes the arguments as variadic parameters.
Method `Texy\Texy::setOutputMode()` is forbidden: there is no replacement; the output is always HTML5.
Z Dibi se dál hlásí rozšiřující metody extensionMethod(), trait Dibi\Strict,
modifyClone() bez argumentu a __sleep() a __wakeup() potomka Connection,
místo kterých patří __serialize() a __unserialize(). Z Texy výstupní režimy HTML4 a XHTML i s
setOutputMode(), getOutputMode() a $xhtml, kódování jiné než UTF-8
($encoding, Utf::toUtf(), utfTo() a utf2html()), metody modulů, které se ve
verzi 3.2 staly privátními, TexyMacro pro Latte 2, $removeOptional, Modifier::$cite a
trait Texy\Strict.
Co knihovna jen tiše označila jako zastaralé, v datech není; s typy to DressCode ohlásí, a kde anotace náhradu řekne,
i přepíše podle upgrading.declarations.deprecatedMember. Změny chování data nezachytí vůbec.
Co balíček pokrývá
| knihovna | verze |
|---|---|
dibi/dibi |
4.1 až 5.1 |
texy/texy |
3.0 až 3.2 |
Jak postupovat po jedné hlavní verzi, popisuje Upgrade kódu.