【问题标题】:CakePHP3 Tree bahavior + translation behaviorCakePHP 3 树行为+翻译行为
【发布时间】:2015-12-04 14:39:33
【问题描述】:

我正在尝试创建需要翻译的类别列表并将它们显示为树结构。但是到目前为止没有运气,我得到了树结构,但是当我创建新类别时,它会添加到树中,但不会显示名称,因为它是用 i18n 翻译并存储在不同的表中...

$categories_list = $this->Categories->find('treeList')->toArray();

这个 var 用我在类别表中的名称存储它自己的树...

$categories_list = $this->Categories->find('translations')->toArray();

这个给了我实际翻译的类别,任何人都知道如何组合它们,CakePhp3 对我来说是一个新事物,我找不到太多关于组合这两种行为的文档。

【问题讨论】:

    标签: php tree cakephp-3.0


    【解决方案1】:

    为了将翻译的字段添加到树列表中,您需要将 TranslateTrait 添加到 Category 实体中,它应该如下所示:

    Link to CookBook 关于翻译行为和 TranslateTrait

    /src/Model/Entity/Category.php

    <?php
    
        namespace App\Model\Entity;
    
        use Cake\ORM\Behavior\Translate\TranslateTrait;
        use Cake\ORM\Entity;
    
        class Category extends Entity{
    
            use TranslateTrait;
    
            //translation field must be accessible
            protected $_accessible = [
                'translations' => true,
            ];
    
        }
    

    那么你应该堆叠多个查找器方法来实现你的目标,一个用于翻译行为,一个用于树行为

    Link to CookBook关于如何堆叠多个finder方法

    /src/Controller/ArticlesController.php

        use Cake\I18n\I18n;     
    
        public function foo(){
    
            /***
            *
            *   1) use translation finder
            *   2) use treeList finder
            *   3) give to treeList finder the translated value to use in the output array as valuePath param
            *
            ***/
    
            $tree_list = $this->Articles->Categories
                ->find('translations')
                ->find('treeList', ['valuePath' => '_translations.' . I18n::getLocale() . '.title'])
                ->toArray();
    
        }
    

    您可以保留 I18n::getLocale() 以自动获取当前语言的树列表或将其替换为您喜欢的语言。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-19
      • 1970-01-01
      • 2011-11-16
      相关资源
      最近更新 更多