Attualmente sto sviluppando un sito Web multilingue. Per la parte multilingua uso traduttore/poedit. Memorizzo la lingua selezionata in sessione. Funziona bene.Zend Framework 2 passa variabile ai modelli
Module.php:
public function onBootstrap(MvcEvent $e)
{
// ...
$session = new Container('base');
if ($session->language !== NULL) {
$e->getApplication()->getServiceManager()->get('translator')->setLocale($session->language);
}
}
azione per l'impostazione della lingua in un controllore:
public function setLanguageAction()
{
$language = $this->params()->fromRoute('language');
if (isset($this->languages[$language])) {
$session = new Container('base');
if ($language == 'en') {
$session->language = NULL;
} else {
$session->language = $language;
}
}
return $this->redirect()->toRoute('home');
}
Nel module.config.php l'impostazione internazionale predefinita è impostata su en.
Come ho detto tutto funziona bene, tranne che per una cosa.
Memorizzo alcuni dati dipendenti dalla lingua anche in DB, quindi nei miei modelli ho bisogno di sapere qual è la lingua corrente. La lingua corrente è necessaria per altri scopi anche nei modelli.
Così ho includere il seguente codice nella funzione costrutto di ogni modello:
$session = new Container('base');
if ($session->language !== NULL) {
$this->language = $session->language;
} else {
$this->language = 'default';
}
penso che non è la soluzione migliore. Ho troppi modelli per includere sempre questo codice.
Vorrei sapere se c'è una soluzione per passare una variabile $ lingua automaticamente a tutti i miei modelli per esempio da Module.php funzione/getServiceConfig:
public function getServiceConfig()
{
$session = new Container('base');
return array(
'factories' => array(
'Application\Model\SomeThing' => function($sm) {
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
$c = new SomeThing($dbAdapter);
$c->language = $session->language;
return $c;
}
)
);
}
Naturalmente questo non sta funzionando, ma sarebbe bello poter fare qualcosa di simile in questo modo, o una soluzione più generale, dove non è necessario assegnare il valore della lingua corrente alla variabile di lingua di ogni modello nell'array di fabbrica (ad esempio un bootstrap comune per modelli, dove questo compito può essere svolto per tutti i modelli in un unico posto).
C'è una soluzione per il mio problema?
Grazie per il vostro aiuto!
M