首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在CakePHP中使用TranslateBehavior?

在CakePHP中使用TranslateBehavior可以通过以下步骤:

  1. 在CakePHP项目中,打开vendors/packages/translator/src/Behavior/目录,并在TranslateBehavior.php文件中复制并粘贴以下代码:
代码语言:php
复制
<?php namespace Cake\ORM\Behavior;

use ArrayObject;
use Cake\Cache\CacheTrait;
use Cake\Core\Configure;
use Cake\Event\EventInterface;
use Cake\ORM\Query;
use Cake\ORM\Table;
use Cake\Validation\Validator;
use Psr\Log\LoggerInterface;

class TranslateBehavior extends \Cake\ORM\Behavior\PolymorphicActiveRecordInterface
{
    use CacheTrait;

    public const T_UNSET = null;
    public const T_INT = 'integer';
    public const T_FLOAT = 'float';
    public const T_STRING = 'string';
    public const T_BOOL = 'boolean';
    public const T_BOOL\_FALSE = '0';
    public const T_BOOL\_TRUE = '1';

    /**
     * The model name.
     *
     * @var string
     */
    protected $_model;

    public function load(array $config)
    {
        $config = array_merge([
            'tables' => [],
            'event' => 'Model.initialize',
            'class' => $this->_model,
        ], $config);

        if (isset($config['fields'])) {
            if (!is_array($config['fields'])) {
                $config['fields'] = func_get_args();
            }
        } else {
            $config['fields'] = func_num_args() === 0 ? ['created', 'updated'] : func_get_args();
        }

        $this->__configure($config);
        $this->__config('cache', $config, function () {
            return Configure::write('TranslateBehavior.cache');
        });
    }

    public function beforeSave(EventInterface $event, Validator $validator)
    {
        if (!$this->isNewRecord($event) && $this->getProperty('id')) {
            $query = $this->getOriginalEntity() ? : new Query($event->getData());
            $query->select('value');
            $this->{$this->name} = $query->first();
        }
    }

    public function beforeDelete(EventInterface $event, Validator $validator)
    {
        if (!$this->isNewRecord($event) && $this->getProperty('id')) {
            $query = $this->getOriginalEntity() ? : new Query($event->getData());
            $query->select('value');
            $this->{$this->name} = $query->first();
        }
    }

    public function afterSave(EventInterface $event)
    {
        $entity = $this->entity();
        $config = $this->get('TranslateBehavior.'.$entity);

        if (empty($config)) {
            return;
        }

        if (!empty($this->{$this->name})) {
            $langcode = $this->{$this->name}['langcode'];
            $langdir = \Locale::getLanguageDirection(\Locale::getId(\Config::get(\Cake\Core\Configure::read('App.locale'))));

            foreach ($config as $key => $value) {
                if (is_string($value['translate']) && preg_match('/^lang(\d+)\.(.*)$/', $value['name'], $matches)) {
                    $value['id'] = $matches[2] === '1' ? self::T_SET : self::T_Unset;
                }

                if (is_array($value['default'])) {
                    foreach ($value['default'] as $defaultValue) {
                        $this->{$key} = $defaultValue;
                        if ($langcode !== $entity->{$key}) {
                            $this->{$key} = str_ireplace(':langcode:', $entity->{$key}, $value['default'][$langcode]);
                        }
                        $this->{$key} = $this->{$key}()
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 4步让你驱动Kubernetes【Containers】

    在本系列的第三篇文章中,我介绍了Kubernetes的基础知识:首先学习如何驱动,我强调您应该学会驱动Kubernetes,而不是构建它。我还解释了在Kubernetes中为应用程序建模必须学习的基本元素是最少的。我想强调这一点:您需要学习的原语集是您可以学习的最简单的原语集,以实现生产质量的应用程序部署(即高可用性[HA],多个容器,多个应用程序)。换句话说,学习Kubernetes内置的一组原语比学习集群软件,集群文件系统,负载平衡器,疯狂的Apache配置,疯狂的Nginx配置,路由器,交换机,防火墙和存储后端要容易得多,这一切您将需要在传统IT环境(用于虚拟机或裸机)中为简单的HA应用程序建模。

    00

    mac开发php集成环境「建议收藏」

    我是一个使用 mac 开发的 phper ,虽然使用 mac 开发也就不到一年,但是 mac 上的一些技巧还是掌握的不错的,但实际开发中光有操作技巧是不行的,环境的效率也是很重要的,因为之前一直使用 homestead 虚拟机,刚开始还没感觉它有多慢,但是后来感觉 homestead 真是太慢了,当然这可能也跟电脑的性能有关,我经常启动好几个虚拟机,在上面跑 windows 系统。但无论如何,它的速度太慢了,请求时间、打开速度起码都在 3s 以上,虽然它可以使本地的开发环境和线上一致,以免在开发中因为服务器环境导致报错,但是还是不得不打算放弃它,因此在我想在mac上直接搭建开发环境,开始了解到 valet ,不得不说,valet 的确是一个轻量级的 laravel 本地开发环境,为什么说 laravel 呢,因为它基本上是为 laravel 定制的开发环境,虽然也支持 cakephp、symfony、zend 这些,但是也太受局限,不过爱研究的人可以自己做驱动,这样也能支持其他框架,如果用的框架多了就很折腾。

    01

    PhpStorm 2018中文破解版附安装破解教程

    PhpStorm 2018是由JetBrains公司所研发的一款功能非常强大的PHP代码编辑器,全称为JetBrains PhpStorm 2018,这是一款非常好用的PHP集成开发工具,目前支持Windows/Mac/Linux等多个平台,使用起来非常方便,旨在提高用户效率,可深刻理解用户的编码,提供智能代码补全,快速导航以及即时错误检查。该作是Java内核开发的功能非常强大的PHP IDE代码编辑器,目前软件常适合于PHP开发人员及前端工程师。该工具支持Symfony,Drupal,WordPress,Zend Framework,Laravel,Magento,Joomla!,CakePHP,Yii等框架,提供最好的php代码编辑环境。 除此之外:PhpStorm 2018还为大家带来了众多高级功能,譬如:智能编辑器:适用于PHP,HTML,CSS,JavaScript和XML,其中包括语法高亮显示,文档查找和重构;无错编码:实时代码分析,错误突出显示和快速修复;项目和代码导航:专门的项目视图,文件结构视图和文件,类,方法和用法之间的快速跳转;VCS集成:支持Subversion,Perforce,Git和CVS的变化列表和合并;FTP同步:使用FTP或SFTP更新服务器以及SQL支持:编码协助,SQL控制台和数据库浏览器等多个功能,可以满足很多开发人员的使用需求。感兴趣的朋友们欢迎前来下载体验。 PS:小编给大家带来的是PhpStorm 2018中文破解版,下方附有安装破解汉化教程,足以完美激活软件,希望对大家有所帮助。

    02
    领券