Nette 2.0 a nové namespace

- Patrik Votoček
- Člen | 2221
Aktuálně: Nové jmenné prostory v Nette
Na jabberu se nám začínají množit dotazy typu „nette 5.3 – 2.0 mi
nenajde tridu mail use Nette\Mail\Mail;“. A tak zakládám tohle
vlákno abych měl kam odkazovat…
Nette prošlo před pár dny celkem radikální změnou namespace viz: https://forum.nette.org/…announcement Takže pokud jste narazili na problém s neexistující třídou / namespace je to nejspíše, protože jste aktualizovali Nette z verze před změnou na verzi po změně.
Aby byl přechod co nejvíce usnadněn tak máte dvě možnosti:
Aliasy
Použít aliasy a to tak že includnete script
(v distribučním balíku
tools/Code-Migration/compatibility-aliases.php).
app/boostrap.php
<?php
/**
* My Application bootstrap file.
*/
use Nette\Debug;
use Nette\Environment;
use Nette\Application\Route;
// Load Nette Framework
// this allows load Nette Framework classes automatically so that
// you don't have to litter your code with 'require' statements
require LIBS_DIR . '/Nette/loader.php';
// includneme aliasy
require LIBS_DIR . '/compatibility-aliases.php'; //případně jiné místo kam jste si script zkopírovali
Přepis
Přepsat na nové namespace (ušetříte si tím práci v budoucnu).
Naštěstí jde přepis automatizovat a to pomocí scriptu
(který opět najdete v distribučním balíku
tools/Code-Migration/class-updater.php).
Stačí ho spustit:
php tools/Code-Migration/class-updater.php -d /cesta/k/myApp
kde /cesta/k/myApp nahradíte za cestu ke složce kde chcete
provést úpravy. Skript běží v read-only režimu (jen píše, které
soubory by změnil), aby skutečně změny prováděl, přidejte ještě
parameter -f.
Nezapomeňte si před použitím zazálohovat své zdrojové kódy a ověřit zda vše proběhlo v pořádku.
Bonus
Takovou třešničkou na dortu je převodník
z PHP 5.2 Nette na namespace Nette (také najdete v distribučním balíku
tools/Code-Migration/migrate-53.php).
Opět stačí spustit:
php tools/Code-Migration/migrate-53.php -d /cesta/k/myApp
kde /cesta/k/myApp nahradíte za cestu ke složce kde chcete
provést úpravy. Skript běží v read-only režimu (jen píše, které
soubory by změnil), aby skutečně změny prováděl, přidejte ještě
parameter -f.
Nezapomeňte si před použitím zazálohovat své zdrojové kódy a ověřit zda vše proběhlo v pořádku.
Přeji hodně štěstí v užívání nového Nette Frameworku!

- David Grudl
- Nette Core | 8285
Dal jsem parameter -f bokem, aby to lidé nejprve raději
pouštěli bez ně.

- Patrik Votoček
- Člen | 2221
no já to pustil bez něj a strašně se divil proč mě git hlásí 0 změn. musel jsem pátrat až pak mě to došlo. je to takové trochu WTF

- David Grudl
- Nette Core | 8285
Bez parametrů nápověda vyskočí. Jde o to, že parameter -f
je bezpečnostní pojistka.

- Filip Procházka
- Moderator | 4668
Nejsem si jistý jestli by to do toho mělo patřit, ale bylo by super kdyby
Code-migration nahrazoval i Tools::createDatetime za
Datetime::from, criticalSection,
mimeType, …

- Jan Tvrdík
- Nette guru | 2595
Patrik Votoček wrote:
Takovou třešničkou na dortu je převodník z PHP 5.2 Nette na namespace Nette (také najdete v distribučním balíku
tools/Code-Migration/migrate-53.php).
Nepřevede Presenter, Environment,
Route, Html a určitě i další.

- xr
- Člen | 94
nejaky fix v dohladnej dobe? nette\utils\tokenizer neexistuje, ale aj po oprave skriptu na nette\tokenizer stale narazam na dalsie chyby – skript sa snazi zapisovat do nedeklarovanej premennej Tokenizer::$ignored, tento riadok som odstranil, dlasi error:
Call to undefined method PhpParser::createToken()
uz nemam chut sa v tom dalej vrtat … DataGrid sa uz niekolko hodin snazim sprevadzkovat s php 5.3 namespases a nic … fail
P.S.: samotny skript vytvara v suboroch (podla pola $replaces) neexistujuce menne priestory – konkretne nette\UTILS\string a nette\UTILS\ARRAYS

- Jan Tvrdík
- Nette guru | 2595
David Grudl wrote:
To je divný, kde se ty třídy vytratily…
To já nevím, já sem doufal, že tebe něco napadne :)

- Jan Tvrdík
- Nette guru | 2595
Pokud si člověk není jist, zda použít relativní nebo absolutní cestu, tak absolutní cesta má výrazně vyšší šanci, že bude fungovat :)