Config Loader – Konfigurace pro každý presenter zvlášť
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Xethilos
- Člen | 19
Potřeboval jsem nějaký konfigurační načítač, který by shromáždil všechny informace, extrahoval do souboru potřebné překlady (Pro PoEdit), parametry v konfigu, práva atd. Odhodlal jsem se to sdílet poprvé na GitHubu a možná se vám to bude hodit a ušetřím vám nějakou tu hodinku.
Ukázka jednoduchého configu v neonu (add.neon):
parameters:
limitPerPage: 20
array:
nette: yes
component: 'Components\Class'
model: 'Model\Model'
menu:
parent: [name: 'Advertisement',
icon: 'pe-7s-display1']
childrens: [[name: 'Add',
url: 'Advertisement:add',
icon: 'pe-7s-plus'],
[name: 'List',
url: 'Advertisement:',
icon: 'pe-7s-keypad']]
authorizator:
resources:
news: 'News'
privileges:
news:
add: 'Add'
edit: 'Edit'
delete: 'Delete'
Načtení loaderu (Bez použití Extenze):
<?php
$writer = new GettextWriter(__DIR__ . '/translations/translations.php'); // Extrahuje všechny překlady z configu do tohoto souboru
$config = new ConfigLoader($appDir, '/configs'); // Načte všechny configy z této cesty a všech podadresářů
$config->setCache($cache); // Nastavení keše, nepovinný parameter, ale celkem důležitý
$config->setWriter($writer); // Nastavení gettextového zapisovače
$config->add('component', function ($values, array $previousValues, $namespace) {
$namespace; // Název config = add.neon = Add ||| add.namespace.neon = AddNamespace
$values; // Hodnoty z položky (Component\Class)
foreach ($values as $name => $class) {
if (!class_exists($class)) {
throw new Exception("Component '$class' does not exist for '$namespace'.");
}
}
$previousValues = $values;
return $values;
}); // Vlastní zpracování položky component
$config->execute(); // Zpracování a dodatečné chování keše
?>
Instalace pomocí konfiguračního neonu:
extensions:
configLoader: ConfigExtension
Parametry v neonu:
configLoader:
writer: # Gettext writer
use: yes # Zda má být použit
execution: GettextWriter::REWRITE # Soubor bude vždy přepsán
cache:
use: yes # Zda má být použit
loader:
directory: '/addons/configs' # Přeloží se jako cesta %appDir%/addons/configs
execution: ConfigLoader::CHECK # Kontroluje zda jsou soubory novější než keš, lze vypnout ConfigLoader::DISABLE
addons:
services: Services::loader # Název addonu pro vlastní extrátor s callbackem
Tyto hodnoty jsou i jako výchozí
Hodnoty které obsahuje třída:
<?php
array (7)
models => array (1)
0 => "Model\Model" (11)
routers => array ()
resources => array (1)
news => "News" (4)
privileges => array (1)
news => array (3)
add => "Add" (3)
edit => "Edit" (4)
delete => "Delete" (6)
menu => array (1)
0 => array (2)
parent => array (1) [ ... ]
childrens => array (2) [ ... ]
parameters => array (1)
Add => Settings
values protected => array (2) [ ... ]
filePath protected => ".../config/add.neon" (92)
namespace protected => "Add" (3)
cache => Cache #6d6c { ... }
components => array(1)
0 => 'Component\Class'
?>
Získání hodnot:
<?php
$config->components;
$config->privileges;
// atd.
?>
Parametery:
<?php
$parameters = $config->getParameters('Add'); // Získání parameterů obsažené v add.config
$config->getParameters($presenter->name); // Získání parameterů v configu s názvem presenteru
?>
Práce s parametery:
<?php
$parameters['limitPerPage']; // Dostaneme 20
$parameters->change(array('limitPerPage' => 50)); // Změna limitu + uložení do souborů v configu + změna v keši
?>
Gettext writer:
<?php
$writer = new GettextWriter(__DIR__ . '/translations/translations.php');
$writer->setExecution($writer::DISABLED); // Vypnutí zapisovače
$writer->setExecution($writer::CHECK); // Když soubor existuje nic nezapíše
$writer->setExecution($writer::REWRITE); // Pokaždé soubor přepíše
$translate = array('Add', 'Edit', 'Writer');
$writer->add($translate);
$writer->add('Delete');
/**
Soubor translations.php
<?php
_('Add');
_('Edit');
_('Writer');
_('Delete');
*/
?>
Editoval Xethilos (10. 11. 2014 16:45)