IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Utilisation de "component" et "slot" [1.x]


Sujet :

Symfony PHP

  1. #1
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Par défaut Utilisation de "component" et "slot"
    Bonjour,

    Ca va pas être simple à expliquer sans schéma mais je vais essayer.

    J'ai un site dans lequel j'ai un menu à gauche, un corps, un en-tête et un pied de page.
    L'en-tête, le menu et le pied de page vont dans le layout, pour ça pas de problème.
    Le corps va dans chaque module, j'ai fait un slot('page') dans mon layout et dans chaque indexSuccess de mes modules je défini le slot.

    Ma première question, vous la devinez : est-ce que l'utilisation d'un slot est bien adaptée pour ce que je fais? Sachant que pour l'instant ca se passe bien, mais je peux arriver à un point de bloquage et j'ai pas envie de revenir en arrière et tout refaire dans 2 mois.

    Deuxième question :
    Sur ce même site j'ai une partie en haut à droit qui sert à authentifier les utilisateurs sachant que cette partie doit apparaitre tout le temps sur chaque page et nécessite des traitements (vérification dans la base si l'utilisateur existe), bref comment afficher un module qui contiendra un formulaire d'authentification dans une partie de ma page?

    Merci pour les nombreuses solutions que vous allez me proposer! ;-)

  2. #2
    Membre chevronné
    Avatar de bricecol
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2007
    Messages
    364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 364
    Par défaut
    Ma première question, vous la devinez : est-ce que l'utilisation d'un slot est bien adaptée pour ce que je fais? Sachant que pour l'instant ca se passe bien, mais je peux arriver à un point de bloquage et j'ai pas envie de revenir en arrière et tout refaire dans 2 mois.
    http://www.symfony-project.org/book/...r_07_sub_slots

    cela répond tout à fait à ton besoin, c'est même fait pour.

    Deuxième question :
    Sur ce même site j'ai une partie en haut à droit qui sert à authentifier les utilisateurs sachant que cette partie doit apparaitre tout le temps sur chaque page et nécessite des traitements (vérification dans la base si l'utilisateur existe), bref comment afficher un module qui contiendra un formulaire d'authentification dans une partie de ma page?
    dans un premier temps, fais ton module comme si de rien n'était. avec
    un formulaire et les traitements adéquates; si tu veux que cette partie
    reste sur la page, appelles-la depuis le layout, comme tu l'as déjà fait
    pour tes autres parties ! utilisez AJAX pour rafraichir uniquement le
    cadre de login.

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Par défaut
    Le corps va dans chaque module, j'ai fait un slot('page') dans mon layout et dans chaque indexSuccess de mes modules je défini le slot.
    En théorie tu n'as pas besoin de slot si tu passes par tes modules, le template associé a ton action sera automatiquement publié. Par example tu as un module forum et une action index et bien tu n'as qu'a créer le template index.php dans ton dossier view.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <?php echo $sf_content ?>
    qui se trouve dans ton layout se chargera de publié ton template.

    Comme le dit bricecol tu peux le laisser dans ton layout cela dit je te conseille d'utiliser un partial, ca sera plus propre.

  4. #4
    Membre chevronné
    Avatar de bricecol
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2007
    Messages
    364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 364
    Par défaut
    Comme le dit bricecol tu peux le laisser dans ton layout cela dit je te conseille d'utiliser un partial, ca sera plus propre.
    oui bien sûr, je ne pense même plus à le dire mais oui, on inclue toujours via un partial ou autre, jamais directement dans le layout...

  5. #5
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Par défaut
    euhhh!! merci pour ces réponses du coup je suis un peu perdu!!!

    Je reprends mon cas :

    Dans mon layout j'ai un include_slot('page');

    toujours dans mon layout j'ai un menu avec des liens vers mes modules par exemple url_for('news/index');
    dans mon module news pour la page indexsucess j'ai définie un slot page dans lequel je mets le contenu de ce que je veux afficher.

    A ce que j'ai compris de ce que vous dites mon choix de slot n'est pas le plus judicieux, il vaux mieux que j'utiliser le $sf_content de base.

    Donc pour ce cas c'est bon j'ai modifié. Première question résolu

    Maintenant la deuxième pour mon encars login.

    Toujours sur ma page layout je faisait appel à un partials de mon module login include_partial('login/auth');

    Ce qui entraine la création dans mon module d'un fichier _auth.php dans lequel je veux mettre mon formulaire. Mais premier problème j'ai pas accès à ma varialble $form que j'ai créer dans mon login/actions.class.php
    Deuxième problème j'ai vu dans la doc d'utilisation des partials qu'on doit passer par l'index pour attribuer les variables au partials.

    étant donné que je fait appel à mon fichier auth et non pas index je ne peux pas passer de variable donc le partial ne doit pas être la meilleur solution.
    Le slot quand à lui doit être défini sur les indexsuccess appelés....

    Bref je ne sais plus quoi faire!!!!!

    Mon besoin d'origine c'est d'avoir un encars avec un formulaire pour s'authentifier. Il doit apparaitre sur chacune des pages et suivant l'action d'authentification je dois afficher le formulaire si la personne n'est pasconnecté sinon un message de déconnexion si elle est connecté.
    Sachant que suivant cet état (connecté/déconnecté) le menu n'aura pas les mêmes liens.

    Merci encore pour votre aide.

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Par défaut
    Je ne suis pas sur de bien comprendre ton probleme. Peux-tu poster ton partial auth?

  7. #7
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Par défaut
    Ci dessous le contenu de mon fichier _auth du module login.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    <table cellspacing="0" border="0">
     
    	<tr>
     
    		<td>
     
    		<div id="login" class="login" align="left">
     
    		<form method="POST" action="<?php url_for('login/index'); ?>">
     
    		<table cellspacing="0" border="0">
     
    			<tr>
     
    				<td colspan="2"><?php echo $form['email']->renderLabel(); ?></td>
     
    			</tr>
     
    			<tr>
     
    				<td><?php //$form['email']; ?></td>
     
    			</tr>
     
    			<tr>
     
    				<td colspan="2"><label> Mot de passe </label></td>
     
    			</tr>
     
    			<tr>
     
    				<td><input type="password" name="mdp" size="19"
    					style="border-width: 0px" /></td>
     
    				<td><input type="submit" name="valid" value="OK" /></td>
     
    			</tr>
     
    			<tr>
     
    				<td colspan="2"><a href="">Inscription</a>
     
    				&nbsp;|&nbsp; <a href="">Oublié ?</a></td>
     
    			</tr>
     
    	</table>
    		</form>
    		</div>
    		</td>
    	</tr>
    </table>


    Dans mon action j'ai ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public function executeIndex(sfWebRequest $request)
      {
       $this->form = new LoginForm();
    }
    et dans mon layout :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php include_partial('login/auth') ?>

    Mais si je fais ca j'ai un message d'erreur :

    Notice: Undefined variable: form in D:\monprojet\apps\frontend\modules\login\templates\_auth.php on line 15
    Et si je commente la ligne j'ai bien le contenu qui s'affiche!!!

    Donc comment accéder à mes variables?

  8. #8
    Membre chevronné
    Avatar de bricecol
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2007
    Messages
    364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 364
    Par défaut
    Notice: Undefined variable: form in D:\monprojet\apps\frontend\modules\login\templates\_auth.php on line 15
    je ne comprends pas, c'est plutôt clair comme message. où as-tu placé ton fichier _auth.php ?

  9. #9
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Par défaut
    je comprends pas ta question???

    Tu me demandes où est mon fichier _auth.php??

    D:\monprojet\apps\frontend\modules\login\templates\_auth.php

  10. #10
    Membre chevronné
    Avatar de bricecol
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2007
    Messages
    364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 364
    Par défaut
    et bien oui. parce que pour moi, ce message est très clair. il ne trouve pas _auth.php dans le dossier templates (du module "login"). c'est pour cela que je te demande

  11. #11
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Par défaut
    Ben non, il trouve bien le fichier auth, c'est la variable form du widget qu'il ne trouve pas.

  12. #12
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Par défaut
    Ouuuhhhhh!!!!

    Ca m'aide pas tout ça!!!

    Notice: Undefined variable: form in D:\monprojet\apps\frontend\modules\login\templates\_auth.php on line 15
    J'aurai dû traduire le message d'erreur en français :

    Attention : variable non définie : form dans D:\monprojet\apps\frontend\modules\login\templates\_auth.php à la ligne 15
    batataw +1

    En attendant j'ai toujours mon problème!!

    Merci pour le mal que vous vous donner à m'aider!

    Mais j'ai peut être mal exposé mon problème, donc je reformule.

    Dans mon site j'ai un encars (i.e. une partie de ma page) dans laquelle se situe un espace pour se logger. Cette partie doit être affichée quelque soit la page dans tout mon site.
    Dans cette partie la personne peux saisir son login et son mot de passe pour pouvoir accéder à un menu étendue.
    J'ai essayé avec les slots mais on ne peux pas mettre un module dans un slot (à moins de m'y être mal pris).
    J'ai essayé avec un partial mais je n'ai pas accès aux variables de mon action (voir le message d'erreur au dessus).
    J'ai essayé avec un component sans plus de succès.
    Est-ce que je dois utiliser un include??? Je pense que je vais finir par utiliser cette solution si aucun des choix précédent ne correspond.

  13. #13
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Par défaut
    pour avoir acces aux variables de ton actions tu dois passer en parametres les variables auxquelles tu veux acceder dans ton partial.

  14. #14
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Par défaut
    J'ai peur de ne pas te comprendre.

    Dans mon action j'ai ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public function executeIndex(sfWebRequest $request)
      {
       $this->form = new LoginForm();
    }
    Pour passer ma variable form dans mon partial j'ai essayé executeAuth (du nom de mon partial) mais ca fonctionne pas.

    Tu peux m'expliquer comment passer les variables?

    Sachant que je ne passe pas par l'indexSuccess de mon module.

    Merci pour votre aide.

  15. #15
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <?php include_partial('login/auth', array('form'
    => $form));?>
    Essaye ca!

  16. #16
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Par défaut
    Arrghhh

    Pas mieux, il ne connait pas form.

    Pour rappel je fait appel au partial depuis le layout et non pas l'indexSuccess de mon module.

  17. #17
    Membre chevronné
    Avatar de bricecol
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2007
    Messages
    364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 364
    Par défaut
    problème d'organisation donc.

    tu as ton formulaire dans ton module login ok. tu l'as donc dans ton indexSuccess du même module.

    or tu veux afficher ce formulaire dans un partial nommé _auth qui est
    plus haut (niveau hiérarchique).

    alors moi je dis, pour quoi ne pas faire ainsi :
    - faire un appel ajax depuis le layout principal pour mettre le
    formulaire dans une div ?

    c'est très simple à faire, tu as juste a :
    - mettre un echo $form dans ton fichier indexSuccess (module login)
    - créer <div id="loginForm">&nbsp;</div> puis un appel ajax
    (UPDATE) qui rempli ce champ avec le template rempli indexSuccess du login :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <div id="loginForm"></div>
    <?php echo javascript_tag(
      remote_function(array(
        'update'  => 'loginForm',
        'url'     => 'login/index',
      ))
    )?>
    enfin, j'aurais fait comme çà. ou j'aurais mis un partial qui
    fait çà dans tout les cas.

  18. #18
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Par défaut
    tu l'as donc dans ton indexSuccess du même module.
    non j'affiche pas l'indexSuccess de mon module j'affiche les indexSuccess de tous les modules mais pas de celui-ci.

    J'ai présenté mon problème, reformulé 2 fois, avec un schéma ca sera peut être plus claire :

    Voir la pièce jointe (je me suis donné du mal à faire le dessin)

    Quand je clique sur le menu je vais afficher l'indexSuccess du module sélectionné, je ne vais pas rajouter dans chaque indexSuccess un lien vers mon module login???!!!

    Après le partial pour ce que je veux faire n'est peut etre pas la meilleur des solutions.
    Images attachées Images attachées  

  19. #19
    Membre chevronné
    Avatar de bricecol
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2007
    Messages
    364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 364
    Par défaut
    J'ai présenté mon problème, reformulé 2 fois, avec un schéma ca sera peut être plus clair
    et moi je répète :

    1/ dans ton module login :
    - dans ton partial auth tu met ton form et affiche le résultat si existant
    - dans executeIndex tu crée ou traites ton form et tu retourne (renderPartial)
    le partial auth avec les données (form + résultat traitements si existant)

    2/ dans ton layout principal, tu fais un UPDATE AJAX de l'action login/index sur un DIV #loginDiv

    c'est beaucoup plus simple et çà marche tout en respectant la séparation
    modulaire et le pattern MVC.


    N.B. : le bouton submit de ton form sera un appel AJAX également vers
    la même fonction : login/index sur le DIV #loginDiv


    ainsi, à l'affichage :
    - le layout fait appel à login/index en AJAX
    - login/index créé ou traite le form (selon s'il y a les paramètres ou non)
    et retourne (renderPartial) auth
    - le formulaire est affiché sur la page (layout principal) dans
    le DIV #loginDiv
    - quand l'utilisateur soumet le form, la même chose se passe mais
    avec des paramètres cette fois donc traitement du form

    je suis pratiquement sûr que cela marche très bien et c'est simple à
    réaliser mais là je ne peux le confirmer a 100% car j'ai du boulot :p

  20. #20
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Par défaut
    Dans la mesure ou ton login est juste un block indépendant compris dans ta page, j'utiliserais plutot un partial sans le mechanisme des widgets, c'est beaucoup plus simple a réaliser.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    <?php use_helper("form");?>
    <table cellspacing="0" border="0">
    	<tr>
    		<td>
    		<div id="login" class="login" align="left">
    		<form method="POST" action="<?php echo url_for('login/index'); ?>">
    		<table cellspacing="0" border="0">
    			<tr>
    				<td colspan="2"><?php echo input_tag("email") ?></td>
    			</tr>
    			<tr>
    				<td><?php //$form['email']; ?></td>
    			</tr>
    			<tr>
    				<td colspan="2"><label> Mot de passe </label></td>
    			</tr>
    			<tr>
    				<td><input type="password" name="mdp" size="19"
    					style="border-width: 0px" /></td>
    				<td><input type="submit" name="valid" value="OK" /></td>
    			</tr>
    			<tr>
    				<td colspan="2"><a href="">Inscription</a>
    				&nbsp;|&nbsp; <a href="">Oublié ?</a></td>
    			</tr>
    		</table>
    		</form>
    		</div>
    		</td>
    	</tr>
    </table>

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Shell][sed]utilisation d'un sed pour gérer des doubles quotes
    Par bstevy dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 06/03/2015, 11h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo