Вопрос

У меня странная проблема с моей схемой доктрины 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() всегда возвращает пустую строку (БД правильно заполнена подходящими данными).

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

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

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

Генератор.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.Но в режиме редактирования я всегда получаю ошибку «имя виджета» не существует».

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

РЕДАКТИРОВАТЬ:

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

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

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

Есть ли у кого-нибудь идеи?Я реально в отчаянии :(

Это было полезно?

Решение 2

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

Другие советы

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

Отображаемые отображаемые значения «Имена» взяты из результата метода __toString (). Вы можете добавить параметры «Метод», как это:

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

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

Ваша форма должна встроить форму I18N. Для этого поставить это в метод настроителя:

$this->embedI18n($cultures);

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top