symfony - PowerPoint PPT Presentation

1 / 56
About This Presentation
Title:

symfony

Description:

create : ajouter un nouvel enregistrement. Dans le r pertoire ... generator.yml ajouter une action II. generator.yml supprimer les actions. Pour ... – PowerPoint PPT presentation

Number of Views:1095
Avg rating:3.0/5.0
Slides: 57
Provided by: notesM8
Category:
Tags: ajouter | symfony

less

Transcript and Presenter's Notes

Title: symfony


1
symfony
  • generators

2
contexte
  • Répétition de limplémentation des méthodes CRUD
    pour ls objets métier
  • Commande symfony permettant dinitialiser un
    module
  • symfony ltTASK_NAMEgt ltAPP_NAMEgt ltMODULE_NAMEgt
    ltCLASS_NAMEgt
  • ltTASK_NAMEgt
  • propel-init-crud
  • propel-generate-crud
  • propel-init-admin.

3
Scaffolding
  • un scaffolding est une structure basique (actions
    et templates) utilisée pour implémenter les
    méthodes CRUD sur une table
  • Le code est minimal car il est censé servir de
    guide pour une développement future
  • Cest une base qui doit être adaptée pour
    correspondre aux besoin logiques et de
    présentation du développeur.
  • Les scaffoldings sont utilisés essentiellement
    pendant la phase de développement, pour avoir un
    accès web a une base de données, pour construire
    un prototype, ou comme base pour un module basé
    lui-même sur une table

4
Administration
  • Une administration est une interface sophistiquée
    de manipulation de données, typiquement dédiée à
    la partie back office
  • Les Administrations se distinguent des
    scaffolding en cela que leur code nest pas
    modifiable.
  • Elles peuvent être paramétrées, étendue, ou
    assemblées par héritage ou configuration.
  • Leur présentation est importante, et elles
    offrent des possibilités de tri, pagination, et
    filtrage.
  • Une administration peut être créée et distribuée
    au client comme une partie finie de lapplication

5
Terminologie symfony
  • Scaffolding (crud)
  • inheritance (init)
  • Classes vides (squelettes)
  • Nest pas fait pour être modifié (? phpMyAdmin)
  • code generation (generate)
  • Classes avec Code
  • En vue dune adpatation du code généré
  • Administration (admin)
  • Modifiable via la configuration

6
Initialiser un scaffolding
  • symfony propel-init-crud myapp article Article
  • http//localhost/myapp_dev.php/article
  • Aucune action dans actions.class.php
  • Aucun template dans le répertoire templates/
  • Tout est hérité dune classe auto-générée
  • myproject/cache/myapp/prod/module/autoArticle/
  • en cache

7
Générer un scaffolding
  • symfony propel-generate-crud myapp article
    Article
  • http//localhost/myapp_dev.php/article
  • Contrôleur et templates générés à partir du
    schema.yml dans myapp/modules/article/
  • Code pour CRUD

8
Détails de la génération dun scaffolding
  • Dans actions/actions.class.php
  • index redirection sur laction list
  • list affiche la liste de tous les
    enregistrements de la table
  • show affiche toutes les colonnes dun
    enregistrement
  • edit affiche un formulaire de modification dun
    enregistrement
  • update action appelée par le formulaire
    dédition
  • delete supprimer un enregistrment
  • create ajouter un nouvel enregistrement
  • Dans le répertoire templates/
  • editSuccess.php formulaire dédition dun
    enregistrement
  • listSuccess.php liste de tous les
    enregistrements
  • showSuccess.php détails dun enregistrement

9
actions.class.php généré
  • class articleActions extends sfActions
  • public function executeIndex()
  • return this-gtforward('article', 'list')
  •  
  • public function executeList()
  • this-gtarticles ArticlePeerdoSelect(new
    Criteria())
  •  
  • public function executeShow()
  • this-gtarticle ArticlePeerretrieveByPk(this
    -gtgetRequestParameter('id'))
  • this-gtforward404Unless(this-gtarticle)
  • ...

10
administration
  • Typiquement adapté au back office
  • symfony init-app backend
  • symfony propel-init-admin backend article Article
  • http//localhost/backend.php/article
  • Fichier de conf cutomisable generator.yml
  • Omposants logiques
  • Look feel
  • Possibilité de refédinir les action ste les
    templates

11
administration code généré
  • Tout est en cache
  • dans actions/actions.class.php
  • create redirection vers laction edit
  • delete supprime un enregistrement
  • edit affiche le formulaire dédition dun
    module, et assure le traitement de la soumission
    de ce formulaire
  • index redirige vers laction list
  • list affiche la liste de tous les
    enregistrements
  • save redirige vers laction edit
  • Dans le répertoire templates/
  • editSuccess.php _edit_actions.php,
    _edit_footer.php, _edit_form.php,
    _edit_header.php, _edit_messages.php
  • _filters.php
  • listSuccess.php _list.php, _list_actions.php,
    _list_footer.php, _list_header.php,
    _list_messages.php, _list_td_actions.php,
    _list_td_stacked.php, _list_td_tabular.php,
    _list_th_stacked.php, _list_th_tabular.php

12
generator.yml
  • backend/modules/article/config/generator.yml par
    défaut
  • N.B. toute customisation se fait à la suite du
    thème et doit par conséquent commencer par 4
    espaces
  • http//www.symfony-project.org/uploads/assets/sfAd
    minGeneratorRefCard.pdf

generator class sfPropelAdminGenerator
param model_class Article theme
default
13
generator.yml - action list - typique
generator class sfPropelAdminGenerator
param model_class Article theme
default fields author_id name
Article author list title List of
all articles display title, author_id,
category_id fields
published_on params date_format'dd/MM/yy'
layout stacked params
is_publishedltstronggttitlelt/stronggtltbr
/gt ltemgtby author in category
(published_on)lt/emgt
ltpgtcontent_summarylt/pgt filters
title, category_id, author_id, is_published
max_per_page 2
14
generator.yml - action edit - typique
generator class sfPropelAdminGenerator
param model_class Article theme
default fields author_id name
Article author edit title Editing
article "title" display
"Post" title, category_id, content
"Workflow" author_id, is_published, created_on
fields category_id params
disabledtrue is_published type
plain created_on type plain,
params date_format'dd/MM/yy'
author_id params size5 include_customgtgt
Choose an author ltlt published_on
credentials content params
richtrue tinymce_optionsheight150
15
generator.yml - fields
  • Par défaut la liste des champs est déduite du
    schema.yml
  • Il est possible de paramétrer quels champs seront
    affichés, cachés, et même dafficher des champs
    customiser nayant pas une correspondance direct
    avec lobjet
  • Fields peut agir au niveau général et peut être
    redéfini au niveau de laction edit ou list
    (cest un principe général)

16
generator.yml fields configuration
  • name nom de lobjet
  • type type de balise dédition (de formulaire) à
    utiliser
  • params paramètres supplémentaires classes CSS,
    taille de la balise dédition, etc
  • help texte daide afficher lors de lédition

17
generator.yml - display
  • Permet de spécifier quels champs sont affichés
    dans une action ainsi que lordre daffichage
    (edit list)
  • Permet également de regrouper les champs par
    rubrique (edit)

generator class sfPropelAdminGenerator
param model_class Comment theme
default list display id,
article_id, content edit display
NONE article_id Editable author,
content, created_at
18
generator.yml display II
  • Par défaut les clés primaires sont toujours
    cachées

19
generator.yml customized fields
  • Les champs du generator.yml ne doivent pas
    forcément correspondre à des champs de base de
    données
  • Un getter du modèle peut être utilisé dans
    laction list
  • Un getter et / ou un setter peut être utilisé
    dans laction list et edit

20
generator.yml customized fields II
  • lib/model/Article.php
  • public function getNbComments()
  • return this-gtcountComments()

generator class sfPropelAdminGenerator
param model_class Article theme
default list display id, title,
nb_comments, created_at
21
generator.yml customized fields III
  • lib/model/Comment.class.php
  • public function getArticleLink()
  • return link_to(this-gtgetArticle()-gtgetTitle(),
    'article/edit?id'.this-gtgetArticleId())

generator class sfPropelAdminGenerator
param model_class Comment theme
default list display id,
article_link, content
22
generator.yml - partial
  • MVC compliance!!
  • modules/comment/templates/_article_link.php
  • lt?php echo link_to(comment-gtgetArticle()-gtgetTitl
    e(),
  • 'article/edit?id'.comment-gtgetArticleId()) ?gt
  • Accès à lobjet courant
  • currentObject -gt current_object

list display id, _article_link,
created_at fields article_link name
Article
23
generator.yml partial logic component
list display id, article_link,
created_at fields article_link name
Article
  • Appel à la méthode articleLink de
    actions/components.class.php
  • Peut être utilisée dans le contexte list, edit,
    filter
  • Le contexte est accessible via type

24
Paramétrage de laffichagele titre
list title List of Articles ... edit
title Body of article title display
content
Permet daccéder à un champs de lobjet
25
generator.yml - note daide
modules/comment/config/generator.yml
edit fields ... article_id
help The current comment relates to this article

26
generator.yml format de date
list fields created_at name
Published, params date_format'dd/MM'
  • N.B. le administrations sont i18n - ready

27
generator.yml affichage de laction list
  • Par défaut léction edit est lié (au sens
    hypertexte) à la clé primaire
  • devant le nom du champs cliquable

list display article_link, content
28
generator.ymltabular (default)/ stacked
list layout stacked params
content ltbr /gt (sent by author on
created_at about article_link)
display created_at, author, content
29
generator.yml - filtres
list filters article_id, author,
created_at layout stacked params
content ltbr /gt (sent by author on
created_at about article_link)
display created_at, author, content
30
generator.yml filtres II
  • Pour les colonnes textes le filtre est une entrée
    texte possédant () en caractère joker
  • Pour les clé étrangères le filtre est une liste
    déroulante contenant les enregistrements de la
    table liée (comme pour object_select_tag(), le
    texte des options est celui retourné par la
    méthode __toString() de la classe liée)
  • Pour les colonnes dates le filtre est composé de
    deux calendrier (rich) permettant la sélection
    dun intervalle de temps
  • Pour les colonnes booléennes, le filtre est une
    liste déroulante possédant les valeurs  true ,
     false , et  true or false  - la dernière
    valeur réinitialise le filtre

31
generator.yml filtres partial
  • Imaginons un champs status pouvant prendre deux
    valeurs (open ou closed), sans table étrangère
  • templates/_state.php
  • lt?php echo select_tag('filtersstate',
  • options_for_select(array(
  • '' gt '',
  • 'open' gt 'open',
  • 'closed' gt 'closed',
  • ), isset(filters'state') ? filters'state'
    '
  • )) ?gt
  • config/generator.yml
  • list
  • filters date, _state
  • N.B. le contenu des champs est accessible via
    filter

32
generator.yml filtrage par valeur vide
  • Afficher tous les commentaires sans auteur

list fields author filter_is_empty
true filters article_id, author,
created_at
33
generator.yml trier les listes
  • En liste toutes les colonnes sont cliquables pour
    lordonnancement
  • Lien direct vers une liste ordonnée selon une
    colonne
  • lt?php echo link_to('Comment list by date',
    'comment/list?sortcreated_attypedesc' ) ?gt
  • Les champs partial ne peuvent pas être un critère
    de tri

list sort created_at Alternative
syntax, to specify a sort order sort
created_at, desc
34
generator.yml - pagination
list max_per_page 5
35
generator.yml utiliser un jointure pour
accélerer les temps de réponse
  • Par défaut doSelect est utilisé
  • Affichage du nom de lauteur dun commentaire
  • requête supplémentaire à chaque commentaire
  • list
  • peer_method doSelectJoinArticle

36
generator.yml changer le type dun champs en
édition
  • Une colonne définie comme integer, float, char,
    varchar(size) sera représentée en édition par
    object_input_tag().
  • Une colonne définie comme longvarchar sera
    représentée en édition object_textarea_tag().
  • Une clé étrangère sera reprsentée par
    object_select_tag().
  • Une colonne définie comme boolean sera
    représentée par object_checkbox_tag().
  • Une colonne définie comme timestamp ou date sera
    représentée object_input_date_tag().

37
generator.yml changer le type dun champs en
édition II
edit fields Drop the input, just
display plain text id type plain
The input is not editable author
params disabledtrue The input is a
textarea (object_textarea_tag) content
type textarea_tag params richtrue
cssuser.css tinymce_optionswidth330
The input is a select (object_select_tag)
article_id params include_customChoose an
article
  • lt?php echo object_select_tag(comment,
    'getArticleId', 'related_classArticle',
    'include_customChoose an article') ?gt

38
generator.yml gérer les champs partial
edit display id, nickname, _newpassword
fields newpassword name Password
help Enter a password to change it
  • templates/_newpassword.php
  • lt?php echo input_password_tag('newpassword', '')
    ?gt

39
generator.yml gérer les champs partial II
  • class userActions extends autouserActions
  • protected function updateUserFromRequest()
  • password this-gtgetRequestParameter('newpas
    sword')
  • if (password)
  • this-gtuser-gtsetPassword(password)
  • parentupdateUserFromRequest()

40
generator.yml gérer les champs partial III
  • Imaginons que newpassword soit un champs de la
    table
  • templates/_newpassword.php
  • lt?php echo input_password_tag(usernewpassword',
    '') ?gt
  • Rien à redéfinit dans le contôleur
  • Pour accéder à la valeur dans le contrôleur
  • user this-gtgetRequestParameter(user')
  • password user'newpassword

41
generator.yml relation 1-n
  • Génération automatique de liste déroulante
  • La valeur est toujours lid
  • Le texte est le résultat de la méthode
    __toString() de lobjet lié ou lid si cette
    méthode nexiste pas
  • relation n-1 nombre de commentaires liés à un
    article
  • Gestion via un partial

42
generator.yml relation n-n
edit fields article_author type
admin_double_list, params through_classArticleAu
thor
43
generator.yml actions de base
list title List of Articles
object_actions _edit _delete
actions _create edit title Body of
article title actions _list
_save _save_and_add _delete
44
generator.yml ajouter une action
list title List of Articles
object_actions _edit - _delete -
addcomment name Add comment, action
addComment, icon addcomment.png
  • Article/actions.actions.class.php
  • public function executeAddComment()
  • comment new Comment()
  • comment-gtsetArticleId(this-gtgetRequestParameter
    ('id'))
  • comment-gtsave()  
  • this-gtredirect('comment/edit?id'.comment-gtgetI
    d())

45
generator.yml ajouter une action II
46
generator.yml supprimer les actions
list title List of Articles actions
  • Pour supprimer toutes les actions dune section

47
generator.yml - nommage
  • Convention de nommage dans les administrations
  • champs de formulaire pour article-gttitle
  • namearticletitle
  • idarticle_title
  • // generator.yml
  • edit
  • display title
  • // Resulting _edit_form.php template
  • lt?php echo object_input_tag(article, 'getTitle',
    array('control_name' gt 'articletitle')) ?gt
  • // Resulting HTML
  • ltinput type"text" name"articletitle"
    id"article_title" value"My Title" /gt

48
generator.yml conséquence sur les validateurs
  • Replace square brackets by curly brackets in
    the fields
  • list
  • fields
  • articletitle
  • required
  • msg You must provide a title
  • For validator parameters, use the original
    field name between quotes
  • sfCompareValidator
  • check "usernewpassword"
  • compare_error The passwords dont

49
generator.yml - credentials
  • The id column is displayed only for users with
    the admin credential
  • list
  • title List of Articles
  • layout tabular
  • display id, title, content, nb_comments
  • fields id credentials admin
  • The addcomment interaction is restricted to
    the users with the admin credential
  • list
  • title List of Articles
  • object_actions
  • _edit -
  • _delete -
  • addcomment
  • credentials admin
  • name Add a comment
  • action addComment
  • icon backend/addcomment.png

50
generator.yml feuille de style
  • generator
  • class sfPropelAdminGenerator
  • param
  • model_class Comment
  • theme default
  • css mystylesheet

51
generator.yml personnalisé len-tête et le pied
de page
  • Il suffit de créer dans le répertoire templates
  • _list_header.php
  • _list_footer.php
  • _edit_header.php
  • _edit_footer.php
  • Ces templates seront automatiquement redéfinis
  • _edit_header.php
  • lt?php if (article-gtgetNbComments() gt 0) ?gt
  • lth2gtlt?php echo article-gtgetNbComments() ?gt
    comments.lt/h2gt
  • lt?php endif ?gt
  • Dans un partial edit lobjet est toujours
    accessible via une variable portant le nom de la
    classe (article)
  • Dans un partial list le pager est toujours
    accessible via la variable pager

52
generator.yml appel dactions avec paramètres
  • This article has
  • lt?php echo link_to(article-gtgetNbComments().'
    comments',
  • 'comment/list', array(
  • 'query_string' gt 'filterfilterfilters5Barticl
    e_id5D'.article-gtgetId()
  • )) ?gt
  • comments.
  • La valeur de query_string est une version encodée
    de 'filterfilterfiltersarticle_id'.article-gt
    getId()
  • Il est possible de spécifier un filtre ou un ordre

53
generator.yml - thèmes
  • Tous les partials hériéts du framework peuvent
    être redéfinis dans le répertoire template
  • Possibilité de redéfinir ces partials pour
    plusieurs modules écrire un nouveau thème
  • Thème par défaut sf_symfony_data_dir/generator/
    sfPropelAdmin/default/
  • Thème personnalisé data/generator/sfPropelAdmin/
    theme_name/template/ (partir du thème par
    défaut)

54
generator.yml thèmes II
  • // theme_name/template/templates/
  • _edit_actions.php
  • _edit_footer.php
  • _edit_form.php
  • _edit_header.php
  • _edit_messages.php
  • _filters.php
  • _list.php
  • _list_actions.php
  • _list_footer.php
  • _list_header.php
  • _list_messages.php
  • _list_td_actions.php
  • _list_td_stacked.php
  • _list_td_tabular.php
  • _list_th_stacked.php
  • _list_th_tabular.php

// theme_name/template/actions/actions.class.php
// Process the request filters
processFilters() // Adds a filter to the
Criteria object addFiltersCriteria()
processSort() addSortCriteria()
55
generator.yml themes III
  • Ces templates sont des templates de templates
  • Ces fichiers seront parsés pour générer les
    templates finaux (phase de compilation)
  • Syntaxe alternative
  • lt?php foreach (this-gtgetPrimaryKey() as pk)
    ?gt
  • ?php echo object_input_hidden_tag(
  • lt?php echo this-gtgetSingularName() ?gt,
  • 'getlt?php echo pk-gtgetPhpName() ?gt
  • ) ?
  • lt?php endforeach ?gt
  • code produit
  • lt?php echo object_input_hidden_tag(article,
    'getId') ?gt

56
generator.yml themes IV
  • Mieux vaut partir des originaux
  • Un thème peut être packagé dans un plugins pour
    une plus grande réutilisabilité et déploiement
    plus rapide
  • Il est possible de construire des générateurs
    personnalisés
  • generator_manager new sfGeneratorManager()
  • data generator_manager-gtgenerate('sfPropelAdm
    inGenerator', parameters)
  • API documentation de sfGeneratorManager
  • Exemple sfAdminGenerator et sfCRUDGenerator
Write a Comment
User Comments (0)
About PowerShow.com