1

У меня есть странная проблема с моей схемой доктрины i18n и i.a. генератор админ.Symfony 1.4: проблемы с генерацией i18n доктрины

(Пожалуйста, смотрите на редактирования части ниже первого)

Схема выглядит так:

CargoSize: 
    connection: doctrine 
    actAs: 
    Timestampable:  ~ 
    I18n: 
     fields:     [name, linkname, seoname, description] 
    tableName: com_cargo_size 
    columns: 
    id:          { type: integer(11), notnull: true, unsigned: true, primary: true, autoincrement: true } 
    name:         { type: string(50), notnull: true } 
    linkname:        { type: string(100), notnull: true } 
    seoname:        { type: string(100), notnull: true } 
    description:       { type: string(255), notnull: true } 

Первая проблема у меня с sfForms:

new sfWidgetFormDoctrineChoice(array('model' => 'CargoSize', 'expanded' => true, 'multiple' => false), array('style' => 'list-style-type: none; display: inline;')) 

Это создает набор радиоприемников с правильные идентификаторы, но пустые значения имени. Даже когда я пытаюсь получить значение имени, напрямую выбрав объект CargoSize по ID и LANG, getName() всегда возвращает пустую строку (DB заполняется правильно с подходящими данными).

Так что-то изношенное с определением схемы ??

Вторая проблема возникает с админ-генератора:

php symfony doc:generate-admin --module=cargo_size admin CargoSize 

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

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

    config: 
     actions: ~ 
     fields: ~ 
     list: 
     display: [name, lang] 
     filter: ~ 
     form: ~ 
     edit: 
     display: [name] 
     new:  ~ 

Самое смешное, что представление списка показывает мне i18n имя. Но в режиме редактирования я всегда получаю ошибку «Виджет» имя «не существует».

У вас есть идеи, почему это происходит? Я был бы очень благодарен за вашу помощь.

EDIT:

Я думаю, что проблема сидит глубже, потому что это просто мир кода делает примечание работу:

Первые наборы данных для примеров:

cargo_size 
id created_at    updated_at 
1 2010-04-22 21:37:44  2010-04-22 21:37:44 

cargo_size_translation 
id  name linkname seoname  description  lang 
1  klein klein  klein  klein   de 
1  small small  small  small   en 

$c = Doctrine::getTable('CargoSize')->findOneBy('id', 1); 
echo $c; // (toString exists) 

// Output: Catchable fatal error: Method CargoSize::__toString() 
// must return a string value in 
// /var/www/.../apps/frontend/modules/start/templates/indexSuccess.php on line 1 

echo $c->getName(); 
// Output: nothing 

ли кто-то есть Есть идеи? Я действительно deperated :(

ответ

1

Я нашел ошибку.По какой-то причине культура была установлена ​​на «de_DE» вместо «de». С этой настройкой поведение i18n не срабатывало!

2

Первая проблема:

«ценности» имена отображенных взяты из __tostring результата метода() Вы можете добавить «метод» варианты, например:.

new sfWidgetFormDoctrineChoice(array('model' => 'CargoSize', 'expanded' => true, 'multiple' => false, 'method' => 'getName'), array('style' => 'list-style-type: none; display: inline;')) 

Вторая проблема:

Ваша форма должна вставлять форму i18n Чтобы сделать это, поместите это в методе конфигурирования:.

$this->embedI18n($cultures); 

где $ culture - это массив ваших кодов культур.

+0

Это смешно, toString у меня уже было. Но теперь, добавив embedI18n, все проблемы, похоже, решаются не только в sfForm, но и в форме независимо места O_o. Так что много для этого намека :) – ownking

+0

Проблема, к сожалению, все еще exsits, я не знаю почему, но когда я хочу получить атрибут name с помощью: $ cargo_size-> getName(); // (Значения находятся в БД для каждого langugae) Он возвращает пустую строку. У вас есть больше идей, в чем проблема? – ownking