Générateur Admin: pourquoi je ne peux pas afficher l'état d'un article, au lieu de state_id?
-
29-09-2019 - |
Question
Je fais un moteur de blog dans Symfony. Voici une partie de mon schéma:
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
(...)
Dans les pages d'administration, je veux afficher le type des articles, mais symfony ne montre que les type_id, pourquoi est-ce?
EDIT: voici mon generator.yml. Je ne l'ai pas modifié beaucoup encore
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: ~
La solution
OK.
Dans votre generator.yml, sur la ligne de display
, Symfony (via Doctrine) recherchera un nom de champ dans votre classe de modèle qui correspond à chaque champ que vous souhaitez afficher. Si le nom du champ ne puis existait pas, il cherchera une méthode de getFieldName()
correspondante et appeler.
Dans votre exemple, vous avez Type
comme un nom de domaine, qui appelleront getType()
-. Cela va chercher la relation dans Par défaut, la doctrine suppose que lorsque vous voulez convertir un modèle en une chaîne (par exemple pour l'affichage dans votre liste), vous souhaitez utiliser la clé primaire -. dans votre cas, la valeur ID
Pour remédier à cela, ajoutez une méthode de __toString()
comme suit, à votre fichier lib/model/doctrine/EcType.class.php
Doctrine:
class EcType extends BaseEcType
{
public function __toString()
{
return $this->type;
}
}
et vous devriez voir le champ « type » affiché dans votre liste générée admin.