Генератор администратора: почему я не могу отобразить состояние статьи вместо state_id? - PullRequest
0 голосов
/ 12 октября 2010

Я делаю движок блога в Symfony.Вот часть моей схемы:

alt text

Content:
  connection: doctrine
  tableName: ec_content
  columns:
    id:
      type: integer(4)
      fixed: false
      unsigned: true
      primary: true
      autoincrement: true
(...)
  relations:
    Author:
      local: author_id
      foreign: id
      type: one
    State:
      local: state_id
      foreign: id
      type: one
    Type:
      local: type_id
      foreign: id
      type: one
(...)

На страницах администрирования я хочу отобразить тип статей, но symfony показывает только type_id, почему это так?

РЕДАКТИРОВАТЬ: вот мой генератор.yml: я еще не сильно его изменил.

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

    config:
      actions: ~
      fields:  ~
      list:
        title: Brouillons
        display: [Type, State, title, link]
      filter:  ~
      form:    ~
      edit:    ~
      new:     ~

1 Ответ

3 голосов
/ 12 октября 2010

OK.

В вашем generator.yml в строке display Symfony (через Doctrine) будет искать имя поля в классе вашей модели, соответствующее каждому полю, которое вы хотите отобразить.Если имя поля не существует, оно будет искать соответствующий метод getFieldName() и вызывать его.

В вашем примере у вас есть Type в качестве имени поля, которое будет вызывать getType() - это вызовет отношение. По умолчанию Doctrine предполагает, что когда вы хотите преобразовать модель в строку (например, для отображения в вашем списке), вы хотите использовать первичный ключ - в вашем случае, значение идентификатора.

Чтобы преодолеть это, добавьте метод __toString() в файл Doctrine lib/model/doctrine/EcType.class.php следующим образом:

class EcType extends BaseEcType
{
  public function __toString()
  {
    return $this->type;
  }
}

, и вы должны увидеть поле 'type', отображаемое у вашего администраторасгенерированный список.

...