L'admin generator de symfony permet la création d'une interface backend pour vos classes de modèle. Il fonctionne si vous utilisez votre ORM Propel ou Doctrine.
Création
Les modules de l'admin generator sont créés par la tâche propel:generate-admin
ou
la tâche doctrine:generate-admin
:
$ php symfony propel:generate-admin backend Article $ php symfony doctrine:generate-admin backend Article
La commande ci-dessus crée un module article
de l'admin generator pour la
classe modèle Article
.
note
Le fichier de configuration generator.yml
est mis en cache dans un fichier PHP, le
processus est automatiquement géré par la classe
sfGeneratorConfigHandler
.
Le fichier de configuration
La configuration d'un tel module peut être fait dans le
fichier apps/backend/modules/model/article/generator.yml
:
generator: class: sfPropelGenerator param: # Un tableau de paramètres
Le fichier contient deux entrées principales : class
et param
. La classe est
sfPropelGenerator
pour Propel et sfDoctrineGenerator
pour Doctrine.
L'entrée param
contient les options de configuration pour le module généré.
Le model_class
définit la classe du modèle lié à ce module, et l'option
theme
définit le thème par défaut à utiliser.
Mais la configuration principale est faite en dessous l'entrée config
. Il est organisé
en sept sections :
actions
: La configuration par défaut pour les actions trouvées dans la liste et dans les formulairesfields
: La configuration par défaut pour les champslist
: La configuration pour la listefilter
: La configuration pour les filtresform
: La configuration pour les formulaires ajout/modificationedit
: La configuration spécifique pour la page modificationnew
: La configuration spécifique pour la page ajout
Lors de la première génération, toutes les sections sont définies à vide, car l'admin generator définit les valeurs raisonnables par défaut pour toutes les options possibles :
generator: param: config: actions: ~ fields: ~ list: ~ filter: ~ form: ~ edit: ~ new: ~
Ce document décrit toutes les options possibles que vous pouvez utiliser pour personnaliser l'admin
generator dans l'entrée config
.
note
Toutes les options sont disponibles pour Propel et Doctrine et fonctionnent de la même manière sauf si c'est indiqué autrement.
Les champs
Beaucoup d'options ont une liste de champs comme argument. Un champ peut être un nom de
colonne réelle ou virtuelle. Dans les deux cas, une méthode de lecture (getter) doit être définie dans
la classe du modèle (get
suffixé par le nom du champs en CamelCase).
Basé sur le contexte, l'admin generator est assez intelligent pour savoir comment
rendre des champs. Pour personnaliser le rendu, vous pouvez créer un partial ou un
component. Par convention, les partials sont préfixés par un caractère de soulignement (_
) et
les components par un tilde (~
) :
display: [_title, ~content]
Dans l'exemple ci-dessus, le champs title
sera rendu par le partial title
,
et le champs content
par le component content
.
L'admin generator passe certains paramètres aux partials et aux components :
Pour les pages
new
etedit
:form
: Le formulaire associé à l'objet du modèle courantattributes
: Un tableau d'attribut HTML à appliquer pour le widget
Pour la page
list
:type
:list
MODEL_NAME
: L'instance de l'objet courant, oùMODEL_NAME
est le nom de la classe du modèle en minuscules.
Dans les pages edit
ou new
, si vous souhaitez conserver la mise en page à deux colonnes (libellé
du champ et widget), le template du partial ou du component doit suivre ce
template :
<div class="sf_admin_form_row"> <label> <!-- le libellé où le contenu du champ à afficher dans la première colonne --> </label> <!-- le widget où le contenu du champ à afficher dans la deuxième colonne --> </div>
Les espaces réservés
Certaines options peuvent prendre des espaces réservés des objets du modèle. Un espace réservé est une chaîne
qui suit ce schéma : %%NAME%%
. La chaîne NAME
peut être tout ce qui
peut être convertie en une méthode getter (get
suffixé par la
chaîne NAME
en CamelCase). Par exemple, %%title%%
sera
remplacé par la valeur de $article->getTitle()
. La valeur de l'espace réservé est
dynamiquement remplacée à l'exécution selon l'objet associé avec le
contexte courant.
tip
Quand un modèle a une clé étrangère vers un autre modèle, Propel et Doctrine
définissent un getter pour l'objet correspondant. Comme pour tout autre getter, il
peut être utilisé comme un espace réservé si vous définissez une méthode significative __toString()
qui convertit l'objet en une chaîne de caractère.
L'héritage de la configuration
La configuration de l'admin generator est basée sur le principes de configuration en cascade. Les règles d'héritages sont les suivantes :
new
etedit
hérite deform
qui hérite defields
list
hérite defields
filter
hérite defields
Credentials
Les actions dans l'admin generator (sur la liste et sur les formulaires) peuvent être cachés,
en utilisant l'option credential
basée sur les informations d'identification des utilisateurs (voir ci-dessous).
Cependant, même si le lien ou le bouton n'apparaîssent pas, les actions doivent
toujours être correctement sécurisées d'un accès illicite. La gestion des autorisations dans
l'admin generator ne s'occupe que de l'affichage.
L'option credential
peut aussi être utilisée pour masquer des colonnes d'une liste dans la page.
Personnalisation des actions
Lorsque la configuration n'est pas suffisante, vous pouvez remplacer les méthodes générées :
Méthode | Description |
---|---|
executeIndex() |
L'action de la vue list |
executeFilter() |
Met à jour les filtres |
executeNew() |
L'action de la vue new |
executeCreate() |
Crée un nouvel enregistrement |
executeEdit() |
L'action de la vue edit |
executeUpdate() |
Met à jour l'enregistrement |
executeDelete() |
Supprime l'enregistrement |
executeBatch() |
Exécute l'action batch |
executeBatchDelete() |
Exécute l'action batch _delete |
processForm() |
Traite le formulaire de l'enregistrement |
getFilters() |
Retourne les filtres en cours |
setFilters() |
Définit les filtres |
getPager() |
Retourne la liste du pager |
getPage() |
Obtient la page du pager |
setPage() |
Définit la page du pager |
buildCriteria() |
Construit le Criteria pour la liste |
addSortCriteria() |
Ajoute le tri à Criteria pour la liste |
getSort() |
Retourne la colonne triée |
setSort() |
Définit la colonne triée |
Personnalisation des templates
Chaque template généré peut être substitué :
Template | Description |
---|---|
_assets.php |
Rend le CSS et JS à utiliser pour les templates |
_filters.php |
Rend la zone des filtres |
_filters_field.php |
Rend un champ de filtre unique |
_flashes.php |
Rend les messages flashes |
_form.php |
Affiche le formulaire |
_form_actions.php |
Affiche le formulaire des actions |
_form_field.php |
Affiche un champ de formulaire seul |
_form_fieldset.php |
Affiche le formulaire fieldset |
_form_footer.php |
Affiche le formulaire de pied de page |
_form_header.php |
Affiche le formulaire d'entête |
_list.php |
Affiche la liste |
_list_actions.php |
Affiche la liste des action |
_list_batch_actions.php |
Affiche la liste des actions batch |
_list_field_boolean.php |
Affiche un seul champ booléen dans la liste |
_list_footer.php |
Affiche la liste du pied de page |
_list_header.php |
Affiche la liste de l'entête |
_list_td_actions.php |
Affiche l'objet des actions pour une ligne |
_list_td_batch_actions.php |
Affiche le checkbox pour une ligne |
_list_td_stacked.php |
Affiche le stacked layout pour une ligne |
_list_td_tabular.php |
Affiche un seul champ pour la liste |
_list_th_stacked.php |
Affiche le nom d'une seule colonne pour l'entête |
_list_th_tabular.php |
Affiche le nom d'une seule colonne pour l'entête |
_pagination.php |
Affiche la pagination |
editSuccess.php |
Affiche la vue edit |
indexSuccess.php |
Affiche la vue list |
newSuccess.php |
Affiche la vue new |
Personnaliser l'apparence
Le look de l'admin generator peut être modifié très facilement car les templates
générés définissent beaucoup d'attributs HTML class
et id
.
Dans la page edit
ou new
, chaque conteneur de champ HTML ont les classes
suivantes :
sf_admin_form_row
- une classe en fonction du type de champs :
sf_admin_text
,sf_admin_boolean
,sf_admin_date
,sf_admin_time
, ousf_admin_foreignkey
. sf_admin_form_field_COLUMN
oùCOLUMN
est le nom de la colonne
Dans la page list
, chaque conteneur de champs ont les classes suivantes :
- une classe en fonction du type de champs :
sf_admin_text
,sf_admin_boolean
,sf_admin_date
,sf_admin_time
, ousf_admin_foreignkey
. sf_admin_form_field_COLUMN
oùCOLUMN
est le nom de la colonne
Options de configurations disponibles
fields
La section fields
définit la configuration par défaut de chaque champs. Cette
configuration est définie pour toutes les pages et peut être surchargé page par
page (list
, filter
, form
, edit
, e new
).
label
Par défaut : Le nom de colonne humanisé
L'option label
définit le label à utiliser pour le champs :
config: fields: slug: { label: "URL shortcut" }
help
Par défaut : none
L'option help
définit le texte d'aide à afficher pour le champs.
attributes
Par défaut : array()
L'option attributes
définit l'attribut HTML à passer au widget :
config: fields: slug: { attributes: { class: foo } }
credentials
Par défaut : none
L'option credentials
définit l'identification des utilisateurs qui doivent
avoir l'affichage du champ. Les identifications sont seulement imposées pour la liste d'objet.
config: fields: slug: { credentials: [admin] } is_online: { credentials: [[admin, moderator]] }
note
Les identifications doivent être définies avec les mêmes règles que dans
le fichier de configuration security.yml
.
renderer
Par défaut : none
L'option renderer
définit le callback PHP à appeler pour rendre le champ. Si elle
est définie, elle remplace tout les autres drapeaux comme les partials ou les components.
Le callback est appelée avec la valeur du champs et les arguments définis
par l'option renderer_arguments
.
renderer_arguments
Par défaut : array()
L'option renderer_arguments
définit les arguments à passer au
callback PHP renderer
lors du rendu du champs. Elle n'est utilisée que si l'option
renderer
est définie.
type
Par défaut* : Text
pour les colonnes virtuelles
L'option type
définit le type de la colonne. Par défaut, symfony utilise le
type défini dans votre définition du modèle, mais si vous créez une colonne virtuelle, vous
pouvez surcharger le type par défaut Text
par un autre type valide :
ForeignKey
Boolean
Date
Time
Text
Enum
(seulement disponible pour Doctrine)
date_format
Par défaut* : f
L'option date_format
définit le format à utiliser lors de l'affichage des dates. Il
peut être de plusieurs formats reconnus par la classe sfDateFormat
. Cette option n'est pas
utilisée quand le champs est de type Date
.
Les symboles suivants peuvent être utilisés pour le format :
G
: Eray
: yearM
: mond
: mdayh
: Hour12H
: hoursm
: minutess
: secondsE
: wdayD
: ydayF
: DayInMonthw
: WeekInYearW
: WeekInMontha
: AMPMk
: HourInDayK
: HourInAMPMz
: TimeZone
actions
Le framework définit plusieurs actions intégrées. Elles sont toutes préfixés par un
underscore (_
). Chaque action peut être personnalisée avec les options décrites dans
cette section. Les mêmes options peuvent être utilisées pour définir une action dans
les entrées list
, edit
, ou new
.
name
Par défaut : la clé de l'action
L'option name
définit le libellé à utiliser pour l'action.
action
Par défaut : défini selon le nom de l'action
L'option action
définit le nom de l'action à exécuter sans le préfixe
execute
.
credentials
Par défaut : none
L'option credentials
définit l'identification des utilisateurs qui doivent avoir l'affichage
de l'action.
note
Les identifications doivent être définies avec les mêmes règles que dans
le fichier de configuration security.yml
.
list
title
Par défaut : Le nom humanisé de la classe du modèle suffixé avec "List"
L'option title
définit le titre de la page de la liste.
display
Par défaut : Toutes les colonnes du modèle, dans l'ordre de leur définition dans le fichier du schéma
L'option display
définit un tableau de l'ordre d'affichage des colonnes dans
la liste.
Un signe égal (=
) avant la colonne est une convention visant à convertir la chaîne en
un lien qui mène à la page edit
de l'objet courant.
config: list: display: [=name, slug]
note
Voir également l'option hide
permettant de cacher certaines colonnes.
hide
Par défaut : none
L'option hide
définit les colonnes à cacher dans la liste. Au lieu de
spécifier les colonnes à afficher avec l'option display
, il est
parfois plus rapide de cacher certaines colonnes :
config: list: hide: [created_at, updated_at]
note
Si les deux options display
et hide
sont fournies, l'option
hide
est ignorée.
layout
Par défaut : tabular
Valeurs possibles: tabular
ou stacked
L'option layout
définit la mise en page à utiliser pour afficher la liste.
Avec la mise en page tabular
, chaque valeur de colonne est dans sa propre colonne dans la table.
Avec la mise en page stacked
, chaque objet est représenté par une unique chaine
qui est défini par l'option params
(voir ci-dessous).
note
L'option display
est toujours nécessaire lorsque vous utilisez la mise en page stacked
car
elle définit les colonnes qui seront triables par l'utilisateur.
params
Valeur par défaut : none
L'option params
est utilisée pour définir le modèle de chaîne HTML à utiliser lorsque vous
utilisez une mise en page stacked
. Cette chaîne peut contenir des espaces réservés du modèle d'objet :
config: list: params: | %%title%% écrit par %%author%% et publié le %%published_at%%.
Un signe égal (=
) avant la colonne est une convention visant à convertir la chaîne en
un lien qui mène à la page edit
de l'objet courant.
sort
Valeur par défaut : none
L'option sort
définit la colonne triée par défaut. C'est un tableau composé
de deux éléments : le nom de la colonne et l'ordre de tri : asc
ou desc
:
config: list: sort: [published_at, desc]
max_per_page
Valeur par défaut : 20
L'option max_per_page
définit le nombre maximum d'objets à afficher sur
une page.
pager_class
Valeur par défaut : sfPropelPager
pour Propel et sfDoctrinePager
pour Doctrine
L'option pager_class
définit la classe de pagination à utiliser lors de l'affichage
de la liste.
batch_actions
Valeur par défaut : { _delete: ~ }
L'option batch_actions
définit la liste des actions qui peuvent être exécutées
par la sélection d'un objet dans la liste.
Si vous ne définissez pas une action
, l'admin generator cherchera une méthode
nommée dont le nom en CamelCase est préfixé par executeBatch
.
La méthode exécutée a reçu les clés primaires des objets sélectionnés via le
paramètre de requête des ids
.
tip
La fonctionnalité des actions batch peut être désactivée en mettant dans l'option un
tableau vide : {}
object_actions
Valeur par défaut : { _edit: ~, _delete: ~ }
L'option object_actions
définit la liste des actions qui peuvent être exécutées
sur chaque objet de la liste.
Si vous ne définissez pas une action
, l'admin generator cherchera une méthode
nommée dont le nom en CamelCase est préfixé par executeList
.
tip
La fonctionnalité des actions batch peut être désactivée en mettant dans l'option un
tableau vide : {}
actions
Valeur par défaut : { _new: ~ }
L'option actions
les actions qui ne prennent pas l'objet, comme la création
d'un nouvel objet.
Si vous ne définissez pas une action
, l'admin generator cherchera une méthode
nommée dont le nom en CamelCase est préfixé par executeList
.
tip
La fonctionnalité des actions batch peut être désactivée en mettant dans l'option un
tableau vide : {}
peer_method
Valeur par défaut : doSelect
L'option peer_method
définit la méthode à appeler pour récupérer les objets à
afficher dans la liste.
caution
Cette option existe seulement pour Propel. Pour Doctrine, utiliser l'option
table_method
.
table_method
Valeur par défaut : doSelect
L'option table_method
définit la méthode à appeler pour récupérer les objets à
afficher dans la liste.
caution
Cette option existe seulement pour Doctrine. Pour Propel, utiliser l'option
peer_method
.
peer_count_method
Valeur par défaut : doCount
L'option peer_count_method
définit la méthode à appeler pour calculer le
nombre d'objets pour le filtre en cours.
caution
Cette option existe seulement pour Propel. Pour Doctrine, utiliser
l'option table_count_method
.
table_count_method
Valeur par défaut : doCount
L'option table_count_method
définit la méthode à appeler pour calculer le
nombre d'objets pour le filtre en cours.
caution
Cette option existe seulement pour Doctrine. Pour Propel, utiliser
l'option peer_count_method
.
filter
La section filter
définit la configuration pour le formulaire de filtre
affiché sur la page liste.
display
Valeur par défaut : Tous les champs définis dans la classe du formulaire de filtre, dans l'ordre de leur définition
L'option display
définit la liste triée des champs à afficher.
tip
Comme les champs du filtre sont toujours facultatifs, il n'y a pas besoin de surcharger la classe du formulaire de filtre pour configurer les champs à afficher.
class
Valeur par défaut : Le nom de la classe du modèle suffixé par FormFilter
L'option class
définit la classe de formulaire à utiliser pour le formulaire filter
.
tip
Pour supprimer complètement la fonctionnalité de filtrage, définissez class
à false
.
form
La section form
n'existe que comme solution de repli pour les sections edit
et new
(voir les règles d'héritage dans l'introduction).
note
Pour les sections du formulaire (form
, edit
, et new
), les options label
et help
surchargent ceux définis dans les classes de formulaires.
display
Valeur par défaut : Tous les champs définis dans la classe du formulaire de filtre, dans l'ordre de leur définition
L'option display
définit la liste triée des champs à afficher.
Cette option peut également être utilisé pour organiser les champs en groupes :
# apps/backend/modules/model/config/generator.yml config: form: display: Content: [title, body, author] Admin: [is_published, expires_at]
La configuration ci-dessus définit deux groupes (Content
et Admin
), chacun
contenant un sous-ensemble des champs de formulaire.
caution
Tous les champs définis dans le formulaire du modèle doivent être présents dans l'option
display
. Sinon, cela pourrait conduire à des erreurs de validation inattendue.
class
Valeur par défaut : Le nom de la classe du modèle suffixé par Form
L'option class
définit la classe de formulaire à utiliser pour les pages edit
et new
.
tip
Même si vous pouvez définir une option class
dans les sections new
et edit
,
il est préférable d'utiliser une classe et prendre soin des différences
en utilisant la logique conditionnelle.
edit
La section edit
prend les mêmes options que la section form
.
title
Par défaut : "Edit " suffixé par le nom humanisé de la classe du modèle
L'option title
définit le titre d'entête de la page edit. Il peut contenir
des espaces réservés de l'objet du modèle.
actions
Valeur par défaut : { _delete: ~, _list: ~, _save: ~ }
L'option actions
définit les actions possibles lors de la soumission du formulaire.
new
La section new
prend les mêmes options que la section form
.
title
Par défaut : "New " suffixé par le nom humanisé de la classe du modèle
L'option title
définit le titre de la page new. Il peut contenir
des espaces réservés de l'objet du modèle.
tip
Même si l'objet est nouveau, il peut avoir des valeurs par défaut que vous voulez afficher dans la partie du titre.
actions
Valeur par défaut : { _delete: ~, _list: ~, _save: ~, _save_and_add: ~ }
L'option actions
définit les actions possibles lors de la soumission du formulaire.
This work is licensed under the Creative Commons Attribution-Share Alike 3.0 Unported License license.