我目前正在开发一个多语言网站。对于多语言部分,我使用翻译器/poedit。我将所选语言存储在会话中。它工作正常。
模块.php:
public function onBootstrap(MvcEvent $e)
{
// ...
$session = new Container('base');
if ($session->language !== NULL) {
$e->getApplication()->getServiceManager()->get('translator')->setLocale($session->language);
}
}
在控制器中设置语言的操作:
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');
}
在 module.config.php 中,默认语言环境设置为 en。
正如我所说,一切正常,除了一件事。
我也在数据库中存储了一些与语言相关的数据,所以在我的模型中我需要知道当前的语言是什么。模型中的其他目的也需要当前语言。
所以我在每个模型的构造函数中包含以下代码:
$session = new Container('base');
if ($session->language !== NULL) {
$this->language = $session->language;
} else {
$this->language = 'default';
}
我认为这不是最好的解决方案。我有太多的模型总是包含这个代码。
我想知道是否有一种解决方案可以将 $language 变量自动传递给我的所有模型,例如从 Module.php / 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;
}
)
);
}
当然这是行不通的,但是能够做类似这样的事情会很棒,或者更通用的解决方案,没有必要将当前语言的值分配给工厂数组中每个模型的语言变量(例如,模型的通用引导程序,可以在一个地方为所有模型完成此分配)。
我的问题有解决方案吗?
谢谢您的帮助!
米