gpt4 book ai didi

php - Zend framework 2 模型中的翻译器

转载 作者:行者123 更新时间:2023-12-04 04:54:45 25 4
gpt4 key购买 nike

如何在模型中获得翻译器?

在内部 View 中,我们可以使用此代码获取翻译器
$this->translate('Text')
在 Controller 内部,我们可以使用此代码获取翻译器

$translator=$this->getServiceLocator()->get('translator');

$translator->translate("Text") ;

但是如何在模型中获得翻译器?

我尝试了很多方法来获取模型中的服务定位器
其中2个

1)使用MVC事件
    $e=new MvcEvent();
$sm=$e->getApplication()->getServiceManager();
$this->translator = $sm->get('translator');

如果我 pring $sm 它显示为空。但它在 Model.php onBootstrap 中运行良好

2)创建了一个实现 的模型ServiceLocatorAware接口(interface)
SomeModel.php
    <?php

namespace Web\Model;

use Zend\ServiceManager\ServiceLocatorAwareInterface;
use Zend\ServiceManager\ServiceLocatorInterface;

class SomeModel implements ServiceLocatorAwareInterface
{
protected $services;

public function setServiceLocator(ServiceLocatorInterface $locator)
{
$this->services = $locator;
}

public function getServiceLocator()
{
return $this->services;
}
}

并在我的模型中使用它
        $sl = new SomeModel();
$sm=$sl->getServiceManager();
var_dump($sm); exit;
$this->translator = $sm->get('translator');

这也打印空。

最佳答案

如果您不需要模型中的 servicemanager 实例,只需将翻译器实例注入(inject)它即可。

例如:

// Your model's constructor

class MyModel {
// Use the trait if your php version >= 5.4.0
use \Zend\I18n\Translator\TranslatorAwareTrait;

public function __construct( $translator )
{
$this->setTranslator( $translator );
}

public function modelMethodWhichNeedsToUseTranslator()
{
// ...
$text = $this->getTranslator()->translate('lorem ipsum');
// ...
}
}

当您第一次在服务或 Controller 级别创建模型时
class someClass implements ServiceLocatorAwareInterface {
public function theMethodWhichCreatesYourModelInstance()
{
// ...
$sm = $this->getServiceLocator();
$model = new \Namespace\MyModel( $sm->get('translator') )
// ...
}
}

如果您需要在多个方法/类上实例化您的模型(new MyModel();),请考虑为它编写一个工厂。

这是一篇关于 Dependency Injection and PHP 的好文章由 Ralph Schindler 撰写,以获取有关此方法的更详细评论。

关于php - Zend framework 2 模型中的翻译器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16915911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com