0

我正在使用 KNP 教义行为进行翻译。它适用于固定装置,但根本不适用于 Sonata admin。

我的最后一个问题是“无法在...中找到“翻译”的关联目标类。

表单小部件我正在使用 A2lix\TranslationFormBundle。这是奏鸣曲表单生成器的代码:

$formMapper
        ->add('id', HiddenType::class)
        ->add('countOfDays')
        ->add('countOfAccounts')
        ->add('price')
        ->add('profileType')
        ->add('translations', TranslationsType::class, [
            'fields' => [
                'name' => [
                    'field_type' => TextType::class,
                    'label' => 'Заголовок'
                ],
            ],
        ]);

我配置了实体,添加了带有两种语言数据的固定装置,并在 twig 中进行了测试。一切正常。

namespace App\Entity;

use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Knp\DoctrineBehaviors\Contract\Entity\TranslatableInterface;
use Knp\DoctrineBehaviors\Contract\Entity\TranslationInterface;
use Knp\DoctrineBehaviors\Model\Translatable\TranslatableTrait;

/**
 * @ORM\Entity()
 */
class Plan implements TranslatableInterface
{
    use TranslatableTrait;

    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * Call
     *
     * @param string $method
     * @param array $args
     * @return string
     */
    public function __call($method, $args)
    {
        if (!method_exists(self::getTranslationEntityClass(), $method)) {
            $method = 'get' . ucfirst($method);
        }

        return $this->proxyCurrentLocaleTranslation($method, $args);
    }

    public function getId(): ?int
    {
        return $this->id;
    }

}


namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;
use Knp\DoctrineBehaviors\Contract\Entity\TranslationInterface;
use Knp\DoctrineBehaviors\Model\Translatable\TranslationTrait;

/**
 * @ORM\Entity()
 */
class PlanTranslation implements TranslationInterface
{
    use TranslationTrait;

    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $name;

    public function getId(): ?int
    {
        return $this->id;
    }

    public function getName(): ?string
    {
        return $this->name;
    }

    public function setName(string $name): self
    {
        $this->name = $name;

        return $this;
    }
}

我也试图创建表单映射器,但它不会将数据保存到数据库并且不显示翻译。

我得到下一个错误: 奏鸣曲形式的问题

4

1 回答 1

0

我解决了这个问题。

我为此使用了 Collection 类型,但您必须创建新的 Admin 进行翻译。

$formMapper
            ->add('id')
            ->add('countOfDays')
            ->add('countOfAccounts')
            ->add('price')
            ->add('profileType')
            ->add('translations', CollectionType::class,
                [
                    'btn_add' => false,
                    'type_options' => ['delete' => false,]
                ],
                [
                    'edit' => 'inline',
                    'inline'     => 'table',
                ]);
于 2020-06-19T20:39:57.937 回答