2012-05-15 2 views
0

У меня проблема с интернализацией форм объектов доктрины в администрировании. Формы работали отлично, но потом я добавил поддержку нескольких языков.Symfony 1.4: Обновление формы после встраивания форм i18n не работает

Схема выглядит следующим образом:

content: 
    actAs: 
    Timestampable: ~ 
    I18n: 
     fields: [title, content] 
    columns: 
    parent: { type: integer } 
    title: { type: string(255), notnull: true, unique: true } 
    slug: { type: string(255), notnull: true, unique: true } 
    content: { type: string } 
    link: { type: string(255) } 
    ord: { type: integer } 
    type: { type: integer, default: 0 } 
    relations: 
    content: { onDelete: CASCADE, local: parent, foreign: id } 
    indexes: 
    parent: { fields: [parent] }  
    slug: { fields: [slug] } 
    type: { fields: [type] }  

Администратор генератора:

generator: 
    class: sfDoctrineGenerator 
    param: 
    model_class:   content 
    theme:     admin 
    non_verbose_templates: true 
    with_show:    false 
    singular:    ~ 
    plural:    ~ 
    route_prefix:   content 
    with_doctrine_route: true 
    actions_base_class: sfActions 

    config: 
     actions: ~ 
     fields: 
     title: { is_real: false } 
     typeFull: { label: Type } 
     list:  
     display: [=title, typeFull]   
     sort: ord 
     max_per_page: 100 
     filter: 
     class: false 
     form:  
     class: adminContentForm 
     edit: ~ 
     new:  ~ 

И, наконец, форма:

class adminContentForm extends BasecontentForm 
{ 
    public function configure() 
    {   
    unset($this['slug'], $this['ord'], $this['created_at'], $this['updated_at']); 

    $this->embedI18n(array('de', 'fr')); 
    $this->widgetSchema->setLabel('de', 'Deutsch'); 
    $this->widgetSchema->setLabel('fr', 'French'); 
    } 
} 

я не изменил класс действий.

Все работает отлично, когда я хочу создать новую запись. Но возникает странная проблема, когда я хочу обновить существующую запись: сохраняет только поля во встроенных форматах i18n (название, содержимое), а поля из основной формы остаются нетронутыми (родительский, ссылочный, тип).

Если я удаляю вложение из формы, он сохраняет родительский, linky и тип правильно. Если я добавлю обратно, он сохранит только заголовок и контент.

Вы когда-нибудь сталкивались с подобной проблемой? Я использую Symfony 1.4.17.


EDIT:

Если добавить это для отладки в processForm() метод в actions.class.php:

var_dump($form->getValue('link')); 
$content = $form->save();   
var_dump($content->getLink()); 
exit(); 

... Я вижу, что значение в поле ссылки был правильно отправлен, но после сохранения формы значение не сохраняется. $ form-> getValue ('link') возвращает правильное значение, но $ content-> getLink() возвращает пустую строку.

+0

какая версия Symfony 1.4 вы используете? Какая ситуация в другом модуле, где вы используете встроенную форму i18n? Можете ли вы поместить свою схему, generator.yml и конфигурацию формы? – denys281

+0

@ denys281 Да, конечно. Я добавил более подробную информацию. Я надеюсь, что это помогает. –

+0

Я не помню, почему, но я обычно использую [этот учебник] (http://www.miximum.fr/tutos/449-optional-translation-form-for-i18n-objects-with-symfony-and-doctrine) для обработки поля i18n. – j0k

ответ

2

Через два дня я наконец получил его! Странное поведение было вызвано столкновением «содержимое», особенно по его имени, которое было таким же, как имя таблицы. Не было никаких проблем, если бы я не использовал поведение i18n. Но после добавления i18n все начало действовать неожиданно, но без сообщения об ошибке, поэтому мне потребовалось очень много времени, чтобы понять это.

Таким образом, имя столбца не должно совпадать с именем таблицы.

+0

hm, interesting :) – denys281