Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > symfony
symfony Forum d'entraide sur le framework PHP symfony. Avant de poster : cours symfony et FAQ symfony
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/10/2011, 17h36   #1
Membre habitué
 
Avatar de Niki59
 
Homme
Développeur Web
Inscription : mai 2008
Messages : 212
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 23
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2008
Messages : 212
Points : 136
Points : 136
Par défaut Utilisation de sfDoctrineRouteCollection

Bonjour,

Je me documente un peu sur sfDoctrineRouteCollection, et je suis tombé sur ce topic :

http://www.developpez.net/forums/d92...s/#post5203362

On y parle de l'option "model_methods" :

Citation:
Code :
1
2
3
4
5
6
7
8
9
10
11
produit:
  class: sfDoctrineRouteCollection
  options:
    model:                produit
    module:               produit
    prefix_path:          /produit
    column:               idProduit
    with_wildcard_routes: true
  model_methods:
    list:   <getMaListe>
    object: <getMonObjet>
<getMaListe> (qui peut être omis si la méthode par défaut donne satisfaction) doit retourner une doctrine_collection des objets à afficher dans la liste

<getMonObjet> doit retourner un objet du model qui correspond à l'objet recherché et est utilisé pour les edit et show (si show est utilisé).

J'utilise ces méthodes pour vérifier, dans le cas d'un blog par exemple, si l'utilisateur à bien les droits pour modifier l'article et que la liste des articles ne concerne que les articles de l'utilisateur. Un foward404 permet de résoudre les tentatives de piratage avant même que l'action ne soit appelée
Je me trouve dans le cas d'un blog justement.

Je voudrais savoir comment s'y prendre pour vérifier "si l'utilisateur à bien les droits pour modifier l'article et que la liste des articles ne concerne que les articles de l'utilisateur".

Les model_methods font référence a des méthodes du fichier model/postTable.class.php :

Code :
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
<?php
/**
 * Post
 * 
 * This class has been auto-generated by the Doctrine ORM Framework
 */
class PostTable extends Doctrine_Table
{
    /**
     * Returns an instance of this class.
     *
     * @return object PostTable
     */
    public static function getInstance()
    {
        return Doctrine_Core::getTable('Post');
    }
 
    public function getMonObjet() {
 
		// Requete de selection du POST avec l'id du membre en paramètre
		// Si aucun résultat trouvé, c'est soit parce que le Post n'existe pas ou soit parce que ce n'est pas le POST de l'user
 
		// Mais comment accéder à l'id du membre dans CETTE méthode ? Impossible.
 
    }
}
Est-ce que quelqu'un peut m'éclairer ? Merci
Niki59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 17h33   #2
Membre chevronné
 
Avatar de Herode
 
Développeur Web
Inscription : mars 2005
Messages : 771
Détails du profil
Informations personnelles :
Localisation : France, Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mars 2005
Messages : 771
Points : 790
Points : 790
Citation:
Envoyé par Niki59 Voir le message
Code :
1
2
 
		// Mais comment accéder à l'id du membre dans CETTE
Si l'utilisateur dont tu parles est l'utilisateur connecté donc en session, il est accessible par $this->getUser() dans une action et par sfContext::getInstance()->getUser() ailleurs.
Herode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/10/2011, 21h42   #3
Membre habitué
 
Avatar de Niki59
 
Homme
Développeur Web
Inscription : mai 2008
Messages : 212
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 23
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2008
Messages : 212
Points : 136
Points : 136
Bonjour Herode,

Merci pour ta réponse, en effet on peut accéder à l'id de l'user via cette méthode :

Code :
$user_id = sfContext::getInstance()->getUser()->getGuardUser()->getId();
J'ai cependant une seconde question.

Dans ma sfDoctrineRouteCollection, sur quelle action est appelé ma méthode getMaListe ? J'ai essayé les actions index et list, mais apparemment ce n'est pas le cas.

Et la documentation est très mince là dessus...

Merci!
Niki59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/10/2011, 10h42   #4
Membre chevronné
 
Avatar de Herode
 
Développeur Web
Inscription : mars 2005
Messages : 771
Détails du profil
Informations personnelles :
Localisation : France, Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mars 2005
Messages : 771
Points : 790
Points : 790
Je n'ai jamais utilisé ces options. Pour gérer mes listes en backend, j'utilise plutôt les options du generator.yml.

Et en effet, je viens de faire un test avec un backend généré par doctrine, la model_method 'list' ajoutée dans la route n'est pas appelée.

Je n'en sais pas plus que toi sur le sujet, du coup...
Herode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/10/2011, 12h34   #5
Membre habitué
 
Avatar de Niki59
 
Homme
Développeur Web
Inscription : mai 2008
Messages : 212
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 23
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2008
Messages : 212
Points : 136
Points : 136
Mince

Bon j'espère que l'auteur du premier sujet (Michel Rota) croisera mon topic et puisse venir expliquer un peu plus en détails ce dont il parlait

Sinon voici ce que me donne la commande "app:routes" :
Code :
1
2
3
4
5
6
7
8
9
post                         GET, HEAD /post.:sf_format
post_new                     GET, HEAD /post/new.:sf_format
post_create                  POST      /post.:sf_format
post_edit                    GET, HEAD /post/:id/edit.:sf_format
post_update                  PUT       /post/:id.:sf_format
post_delete                  DELETE    /post/:id.:sf_format
post_show                    GET, HEAD /post/:id.:sf_format
post_object                  GET, HEAD /post/:id/:action.:sf_format
post_collection              POST      /post/:action/action.:sf_format
J'ai regardé la route 'post', et elle n'apelle jamais ma méthode getMaListe .
Niki59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/10/2011, 13h16   #6
Membre habitué
 
Avatar de Niki59
 
Homme
Développeur Web
Inscription : mai 2008
Messages : 212
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 23
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2008
Messages : 212
Points : 136
Points : 136
Bonjour,

Finalement j'ai trouvé. Voici comment appeler la méthode list, ou la méthode object renseigné dans la collection de route sfDoctrineRouteCollection :

Depuis l'action, pour appeler la méthode object :
Code :
$this->getRoute()->getObject();
Cette méthode appellera getMonObjet de la librairie PostTable.class.php

Depuis l'action, pour appeler la méthode list:
Code :
$this->getRoute()->getObjects();
Cette méthode appellera getMaListe de la librairie PostTable.class.php

Voila c'était aussi simple que ca.
Niki59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h57.


 
 
 
 
Partenaires

Hébergement Web