首页
学习
活动
专区
工具
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}()
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的合辑

领券