Symfony: как использовать виджеты с формами i18n в бэкэнде (доктрина)
-
22-07-2019 - |
Вопрос
Мне не удается разместить виджеты i18n и tinyMCE на интернационализированных полях. Если я поставлю оба, у меня будут интернационализированные поля для всех полей моих объектов, но для них не будет tinyMCE. У меня будет столько полей tinyMCE, сколько я объявил, но они не будут соответствовать ни одному языку, они будут в начале или в конце. Он отлично работал до того, как я интернационализировал объекты.
Вот пример кода:
// config / doctrine / schema.yml
MyObject:
actAs:
I18n:
fields: [title, subtitle, intro, text]
columns:
title: {type: string(500)}
subtitle: {type: string(500)}
intro: {type: string(4000)}
text: {type: string(16000)}
// lib / form / doctrine / MyObject.class.php
public function configure()
{
$this->embedI18n(array('en', 'fr', 'es'));
$this->widgetSchema->setLabel('fr', 'Français');
$this->widgetSchema->setLabel('en', 'Anglais');
$this->widgetSchema->setLabel('es', 'Español');
$this->widgetSchema['intro'] = new sfWidgetFormTextareaTinyMCE(
array(
'width'=>600,
'height'=>100,
'config'=>'theme_advanced_disable: "anchor,image,cleanup,help"',
'theme' => sfConfig::get('app_tinymce_theme','simple'),
),
array(
'class' => 'tiny_mce'
)
);
$this->widgetSchema['text'] = new sfWidgetFormTextareaTinyMCE(
array(
'width'=>600,
'height'=>100,
'config'=>'theme_advanced_disable: "anchor,image,cleanup,help"',
'theme' => sfConfig::get('app_tinymce_theme','simple'),
),
array(
'class' => 'tiny_mce'
)
);
$js_path = sfConfig::get('sf_rich_text_js_dir') ? '/'.sfConfig::get('sf_rich_text_js_dir').'/tiny_mce.js' : '/sf/tinymce/js/tiny_mce.js';
sfContext::getInstance()->getResponse()->addJavascript($js_path);
}
Поэтому я предполагаю, что когда я использую $ this-> gget; widgetSchema ['intro'], " intro " имя не соответствует всем i18n < intro " поля. Я пробовал оба «en_intro» и «intro_en», но это не делает никакой магии. Так может ты мне поможешь?
Решение
Итак, я нашел, как это сделать, и подумал, что это может кого-то заинтересовать:
Вместо
$this->widgetSchema['intro'] = ...
Положите
$this->widgetSchema['en']['intro'] = ...
со всеми языками.
Другие советы
также вы можете использовать:
$this->widgetSchema->moveField('en',sfWidgetFormSchema::BEFORE,'intro');
переместите метку и поле i18n до поля ввода.