Cake PHP Translate Behavior,mutilple field anomaly?

时间:2017-09-21 09:36:37

标签: cakephp translation cakephp-3.0

我使用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();”如何解决我的问题???? :■
谢谢你的帮助。

0 个答案:

没有答案