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