Migrace na Nette 2.1.0

Před pár dny vyšla nová verze Nette (2.1.0), a tak jsem se dnes pustil do aktualizace všech projektů, které mám momentálně rozdělané. Z čistě pragmatického hlediska nepřináš aktualizace žádný přímý benefit – stojí to čas, aplikace nebude o nic rychlejší a ještě k tomu je nutno ji upravit kvůli BC změnám.

I tak se to ale vyplatí. Nejsem sice žádný Nette evangelista, takže nesleduji aktuální novinky kolem frameworku. Je ale nesmysl pracovat na něčem, o čem vím, že už v době předání bude zastaralé.

Během migrace jsem narazil jen na pár nekompatibilit (seznam budu možná průběžně rozšiřovat)

Connection::table() deprecated

Chybová hláška Nette\Database\Connection::table() is deprecated; use Nette\Database\Context::table() instead

Vyřešil jsem jednoduše – stačilo v autowiringu mé třídy (config.ini, konstruktor…) přepsat typ objektu:

public function __construct( \Nette\Database\Connection $db ) {

na

public function __construct( \Nette\Database\Context $db ) {

Pokud používáte defaultní Authenticator, pak je třeba stejnou úpravu udělat i v něm.

Nová dvojtečková notace

Heuristicky: vypadá to, že se jen změnila poloha dvojtečky v Nette\Database při používání JOINů. Nebyl jsem schopen nalézt ucelenou dokumentaci, jestli v tom není nějaký další háček, každopádně změny následujícího typu vše vyřešily:

->where(‚content_lang:language_id‘,1)->select(‚content_lang:*,content.*‘) ;

změnit na

->where(‚:content_lang.language_id‘,1)->select(‚:content_lang.*,content.*‘) ;

wherePrimary() místo find()

Všude, kde jsem v Nette\Database používal metodu find() jsem musel přepsat na wherePrimary().

Mailer je samostatný objekt

Dříve byl mailer součástí Message, stačilo zavolat $message->send() a email se odeslal pomocí Maileru, který jste nastavili. Dnes je Mailer samostatný objekt, kterému předáte message. Stačí jen upravit:

$message->send();

na

$mailer->send( $message );

Nová ID u políček ve formuláři

Některé formuláře se mi zcela rozsypaly, a to v případě, kdy jsem styloval prvky formuláře pomocí #id selektoru. Dříve byl název políčka ve formátu frmNazevFormulare-nazevpolicka, nyní přibyla pomlčka: frm-NazevFormulare-nazevpolicka.

Jinak je migrace (aspoň z mé zkušenosti) relativně snadná a rychlá záležitost a určitě ji doporučuji.