ODM, Symfony: переводы и формы

Я не смог найти пример использования, где есть нормальная реализация перевода. Мне нужно добавить отдельную таблицу с переводами. У меня есть следующие таблицы:

/**
 * Class QuotaTranslation
 * @package AppBundle\Document\Translation
 *
 * @ODM\Document(collection="quotaTranlation", repositoryClass="Gedmo\Translatable\Document\Repository\TranslationRepository")
 * @ODM\Index(name="translations_lookup_idx", keys={ "locale" = "asc", "field" = "asc"})
 */
class QuotaTranslation extends AbstractPersonalTranslation
{
    /**
     * @ODM\ReferenceOne(targetDocument="AppBundle\Document\Quota", inversedBy="translations", cascade="remove")
     */
    protected $object;

    /**
     * Convenient constructor
     *
     * @param string $locale
     * @param string $field
     * @param string $value
     */
    public function __construct($locale, $field, $value)
    {
        $this->setLocale($locale);
        $this->setField($field);
        $this->setContent($value);
    }

}

И основной документ:

/**
 * Class Quota
 * @package AppBundle\Document
 *
 * @ODM\Document(collection="quota", repositoryClass="AppBundle\Document\Repository\QuotaRepository")
 * @Gedmo\TranslationEntity(class="Document/Translation/QuotaTranslation")
 * @Gedmo\SoftDeleteable(fieldName="deletedAt", timeAware=false)
 * @JMS\ExclusionPolicy("all")
 */
class Quota
{

    /**
     * @var integer $id
     *
     * @ODM\Id(strategy="INCREMENT")
     * @ODM\Index(unique=true)
     *
     * @JMS\Expose
     * @JMS\Type("integer")
     */
    private $id;


    /**
     * @JMS\Expose
     * @JMS\Accessor(getter="getTranslations")
     *
     * @ODM\ReferenceMany(
     *     targetDocument="AppBundle\Document\Translation\QuotaTranslation",
     *     mappedBy="object",
     *     cascade={"persist", "remove"}
     * )
     */
    public $translations;

    private $productType;
    ...
    //and other fields;
    ...
}

Моя форма перевода:

/**
 * Class QuotaTranslationType
 * @package AppBundle\Form\Type\Quota
 */
class QuotaTranslationType extends AbstractType
{
    /**
     * @var QuotaManager $quotaManager
     */
    private $quotaManager;

    /**
     * @param QuotaManager $quotaManager
     */
    public function setQuotaManager(QuotaManager $quotaManager)
    {
        $this->quotaManager = $quotaManager;
    }

    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('locale', TextType::class)
            ->add('field', TextType::class)
            ->add('content', TextType::class)
        ;
    }

    /**
     * {@inheritdoc}
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => AbstractPersonalTranslation::class,
            'csrf_protection' => false
        ]);
    }

    /**
     * {@inheritdoc}
     */
    public function getBlockPrefix()
    {
        return 'api_quota_type';
    }
}

и моя основная форма:

/**
 * Class CreateType
 * @package AppBundle\Form\Type\Quota
 */
class QuotaType extends AbstractType
{


    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('productType', TextType::class)
            ->add('translations', CollectionType::class, array(
                'entry_type' => QuotaTranslationType::class,
                'allow_add' => true,
                'by_reference' => false,
                'entry_options' => array(
                    'data_class' => 'AppBundle\Document\Translation\QuotaTranslation'

                )
            ))
        ;

    /**
     * {@inheritdoc}
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => Quota::class,
            'validation_groups' =>
                Request::createFromGlobals()->isMethod('POST') ? ['registration'] : [],
            'csrf_protection' => false
        ]);
    }

    /**
     * {@inheritdoc}
     */
    public function getBlockPrefix()
    {
        return 'api_quota_type';
    }
}

Итак, как я могу добавить принять запрос от внешнего интерфейса? В каком формате? Что должно быть в форме для перевода и где я не прав? Я перепробовал очень много вариантов, и никто не может мне помочь. В большинстве случаев из-за конструкции, которую я имею в QuotaTranslation. Всегда это говорит мне Miss first parameter... Может кто-нибудь помочь мне дать правильный совет, как сделать эту форму и в какой структуре должны быть?

0 ответов

Другие вопросы по тегам