我使用CakePHP的核心翻译器,我有一个异常 我有90个表的应用程序。 80个表至少在字段上进行翻译。有些表格有多个字段 所有表格都只有很少的记录(我正在开发中) 我的应用程序中没有任何问题,所有表只有一个字段要翻译但是当我使用多个字段的表进行翻译时,似乎我有一个无限循环,然后结束了内存问题。
代码的例子 MarketsTable.php
class MarketsTable extends BaseTable {
public function initialize(array $config){
parent::initialize($config);
$this->setTable('markets');
$this->setDisplayField('id');
$this->setPrimaryKey('id');
$this->addBehavior('Translate', ['fields' => ['name_lang','description_lang']]);
}
public function buildRules(RulesChecker $rules) {
$rules->add($rules->isUnique(['name_lang']));
$rules->add($rules->existsIn(['language_id'], 'Languages'));
return $rules;
}
}
Market.php
class Market extends EntityBase{
use LazyLoadEntityTrait;
use TranslateTrait;
protected $_accessible = ['*' => true,'id' => false];
}
最后我有一点非常奇怪,但我想一些PHP的专家会解释我的。我找到了解决问题的“解决方案” 如果我是TranslateBehavior类中的一行代码,则该问题不再存在(代码从TranslateBehavior.php的第207行开始)
public function beforeFind(Event $event, Query $query, $options){
$locale = $this->locale();
if ($locale === $this->getConfig('defaultLocale')) {
return;
}
$conditions = function ($field, $locale, $query, $select) {
return function ($q) use ($field, $locale, $query, $select) {
$q->where([$q->repository()->aliasField('locale') => $locale]);
if ($query->isAutoFieldsEnabled() || in_array($field, $select, true) || in_array($this->_table->aliasField($field), $select, true)) {
$q->select(['id', 'content']);
}
// line added by myself
$q->__toString();
return $q;
};
};
// ...
}
这行“$ q-> __ toString();”如何解决我的问题???? :■
谢谢你的帮助。