gpt4 book ai didi

zend-framework - 使用 symfony 和 i18n 来 Zend Lucene

转载 作者:行者123 更新时间:2023-12-04 06:41:06 24 4
gpt4 key购买 nike

我已经完成了 Jobeet Tutorial用于将 Zend Lucene 集成到 symfony (1.4.8) 项目中,以便将搜索功能添加到我网站的前端(通过索引)。其中,关键概念是在模型的 save 操作(需要被覆盖)期间使用 updateLuceneIndex 以创建/更新特定条目的索引。

我的模型有 i18n 字段,其中一些(即 nametitle)我想插入到索引中。一切都按预期工作,但是当涉及到将 i18n 字段保存到索引中时,我得到的只是空值($this->getName() 返回空字符串)。我正在使用 Luke 检查创建的索引.

我最终发现这与 Zend Lucene 无关,而与 symfony 有关。似乎在 save 期间,i18n 字段的信息不可用(或者是?)。我还尝试在 preSave()postSave() 期间连接更新,但无济于事。

所以我想问一下,我应该如何在保存操作期间获取模型的 i18n 字段值,以便相应地更新索引?

重要说明:这只发生在 doctrine:data-load 任务期间。如果我手动插入或更新记录,索引会相应更新。

最后一个相关问题。如果我可以为模型领域的每种语言保存不同的关键字,那就太好了。如何获取模型中每个字段语言的不同值?

最佳答案

Symfony 这种奇怪行为的原因是,当您通过 cli 加载固定装置时,它没有加载上下文(例如,当您尝试获取上下文实例 sfContext::getInstance() 时,你会得到“上下文实例不存在”错误异常)。

没有可用的上下文实例,就没有“当前文化”,没有当前文化,就没有 i18n 字段的值。

symfony 上下文实际上支持当前用户文化的所有 I18N 功能($currentUserCulture = sfContext::getInstance()->getUser->getCulture())。

这一切意味着两件事:

  • 你不能使用 symfony 的“当前用户文化”功能在 cli session 中
  • 如果你需要在你的某处有sfContext::getInstance()代码(特别是在模型中),你必须将它关闭到条件中,以避免在 cli 中出现意外和难以发现异常的任何麻烦

在模型类中获取当前文化的示例(在 cli 中不会通过条件):

if (sfContext::hasInstance()) {
sfContext::getInstance()->getUser()->getCulture();
}

所以当你不能使用 Symfony i18n 快捷方式(如 $record->getName())时,你必须解决它。在您的 symfony1-doctrine 模型中,您总是可以使用 $this->Translation 对象。因此,您可以通过类似 $this->Translation[$culture] 的方式访问您的翻译值对象。

使用它取决于你,你可以使用你的默认文化 $this->Translation[sfConfig::get('sf_default_culture')],或者通过你支持的所有文化进行交互一些全局配置(我建议您在所有应用程序的全局配置文件之一中设置它 - 也许是/config/app.yml)。

在任何情况下获取 $record Translation 对象的示例:

if (sfContext::hasInstance()) {
$translation = $this->Translation[sfContext::getInstance()->getUser()->getCulture()];
}
else {
$translation = $this->Translation->getFirst();
// or: $translation = $this->Translation[$yourPreferedCulture];
}
// you can access to modified fields of translation object
$translationModified = $translation->getModified();

关于zend-framework - 使用 symfony 和 i18n 来 Zend Lucene,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7941689/

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