Как управлять переводами в админке Sonata с помощью поведения перевода KNP - PullRequest
0 голосов
/ 19 июня 2020

Я использую поведения KNP doctrine для переводов. Он работает из фикстур, но не работает в админке Sonata вообще.

Моя последняя проблема - «Невозможно найти целевой класс ассоциации для« переводов »в ...».

Форма формы виджет Я использую A2lix \ TranslationFormBundle. Это код из конструктора форм Sonata:

$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;
    }
}

Я также пытался создать преобразователь форм, но он не сохраняет данные в БД и не показывает переводы.

И я получаю следующую ошибку: issue in sonata form

1 Ответ

0 голосов
/ 19 июня 2020

Я решил проблему.

Я использовал для этого тип Collection, но вам нужно создать нового администратора для перевода.

$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',
                ]);
...