2010-10-12 1 views
0

Я занимаюсь блога в Symfony. Вот часть моей схемы:Admin generator: почему я не могу отобразить состояние статьи, а не state_id?

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, почему это?

EDIT: вот мой генератор.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:  ~ 
+0

Можете ли вы разместить свой генератор.yml из своего модуля-генератора администратора? – richsage

ответ

3

ОК.

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

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

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

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

и вы увидите поле «типа» отображаются в ваших админы генерируются список.

+0

Так просто, он работает сразу. Благодаря ! – Manu