Migrace aplikace z NETTE 0.9x na NETTE 2.0x

Potřeboval jsem v jedné starší aplikaci použít dynamické snippety. Po tom co jsem delší dobu hledal jak toto vyřešit ve starém NETTE 0.96, tak jsem na tuto myšlenku nakonec rezignoval a rozhodl jsem se přejít na aktuální verzi NETTE 2.0.6. I když ze začátku jsem se toho bál, tak nakonec to nebylo tak hrozné…

Co jsem tedy měnil…

bootstrap.php – ten doznal asi největších změn, ale jedná se spíše jen o přepis než o změnu logiky
OLD:

< ?php
require LIBS_DIR . '/Nette/loader.php';
require LIBS_DIR . '/dibi/dibi.php';
require LIBS_DIR . '/currency.php';
require APP_DIR  . '/models/MyAuthenticator.php';
require APP_DIR  . '/models/FrontAuthenticator.php';
 
date_default_timezone_set('Europe/Prague');
 
//$mode = Debug::DEVELOPMENT;
$mode = Debug::PRODUCTION;
Debug::enable($mode, NULL, 'mail@na-me.cz');
Debug::$strictMode = TRUE;
 
$loader = new RobotLoader();
$loader->addDirectory(APP_DIR);
$loader->register();
 
// nastavime dibi
dibi::connect(array(
	'driver'   => 'mysql',
	'host'     => 'localhost',
	'username' => 'user',
	'password' => 'pass',
	'database' => 'db',
	'charset'  => 'utf8',
 ));
 
$application = Environment::getApplication();
$application->errorPresenter = 'Error';
$application->catchExceptions = TRUE;
 
$router = $application->getRouter();
 
$router[] = new Route('index.php', array(
	'presenter' => 'Default',
	'action' => 'default',
), Route::ONE_WAY);
 
$router[] = new Route('/', array(
    'presenter' => 'Default',
    'action' => 'default',
));
 
$router[] = new Route('admin/<action>/', array(
    'presenter' => 'Admin',
    'action' => 'objednavky',
));
 
// další routy
 
FormContainer::extensionMethod('FormContainer::addCheckboxList', array('CheckboxList', 'addCheckboxList'));
 
$application->run();

NEW:

< ?php
require LIBS_DIR . '/Nette/loader.php';
require LIBS_DIR . '/dibi/dibi.php';
require LIBS_DIR . '/currency.php';
require APP_DIR  . '/models/MyAuthenticator.php';
require APP_DIR  . '/models/FrontAuthenticator.php';
 
date_default_timezone_set('Europe/Prague');
 
$configurator = new Configurator;
 
$configurator->setDebugMode(TRUE);
$configurator->enableDebugger(dirname(__FILE__) . '/log');
 
// Enable RobotLoader - this will load all classes automatically
$configurator->setTempDirectory(dirname(__FILE__) . '/temp');
$configurator->createRobotLoader()
	->addDirectory(APP_DIR)
	->addDirectory(LIBS_DIR)
	->register();
 
// Create Dependency Injection container from config.neon file
//$configurator->addConfig(dirname(__FILE__) . '/config/config.neon');
 
$container = $configurator->createContainer();
 
// Setup router
$container->router[] = new Route('index.php', array(
	'presenter' => 'Default',
	'action' => 'default',
), Route::ONE_WAY);
 
$container->router[] = new Route('/', array(
    'presenter' => 'Default',
    'action' => 'default',
));
 
$container->router[] = new Route('admin/<action>/', array(
    'presenter' => 'Admin',
    'action' => 'objednavky',
));
 
// další routy
 
// nastavime dibi
dibi::connect(array(
	'driver'   => 'mysql',
	'host'     => 'localhost',
	'username' => 'user',
	'password' => 'pass',
	'database' => 'db',
	'charset'  => 'utf8',
	'profiler' => TRUE
 ));
 
FormContainer::extensionMethod('FormContainer::addCheckboxList', array('CheckboxList', 'addCheckboxList'));
 
$container->application->run();

Největším oříškem pro mě bylo rozchodit LATTE šablony. Ne že by to bylo v novém NETTE složité ale …
BasePresenter.php
OLD

	// v 0.96 si musíme použití šablony zajistit registrací tohoto filtru
	public function templatePrepareFilters($template) {
		$template->registerFilter(new CurlyBracketsFilter);
	}

NEW

	// v novém NETTE jsem myslel, že bude stačit
	// zakomentovat jeden řádek ($template->register...),
	// ale to nefungovalo a několik minut jsem nemohl přijít na to proč.
	// Nakonec pomohlo zakomentovat celou tuto funkci.
	/*public function templatePrepareFilters($template) {
		$template->registerFilter(new CurlyBracketsFilter);
	}*/

Další změny jsou spíše drobnosti a řešil jsem je jak jsem na ně přicházel:
$form->addFile() -> $form->addUpload
User::INACTIVITY -> IUserStorage::INACTIVITY
$user->setAuthenticationHandler(new MyAuthenticator); -> $user->setAuthenticator(new MyAuthenticator);
$form->onSubmit[] -> $form->onSuccess[]
skipFirst() -> setPrompt()
třída String -> Strings (například Strings::webalize())

Takže nakonec žádné terno… :)

Napsat komentář

Vaše emailová adresa nebude zveřejněna.