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 | 8221
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 | 8221
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 :)