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

 PHP Discussion :

Affichage de news [4.x]


Sujet :

PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Clavardeur en tout genre
    Inscrit en
    Août 2019
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Clavardeur en tout genre

    Informations forums :
    Inscription : Août 2019
    Messages : 60
    Points : 59
    Points
    59
    Par défaut Affichage de news
    Bonjour à tous ,


    je développe un blog (mon premier projet) , sur la page principale tous les articles sont affichés. Certains articles peuvent être lus sans être identifiés, d'autres ne peuvent l'être sans identification. Comment ajouté cette contrainte lors de la création de l'article ? J'aurai bien besoin que l'on éclaire ma lanterne , ou quelques pistes exploitables car la je sèche.

    Merci d'avance pour votre temps et vos réponses

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    351
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 351
    Points : 582
    Points
    582
    Par défaut
    Salut,

    Tu peux modifier ton entité Article pour lui ajouter un champ booléen (ex : "public"), ainsi lors de la création/modification de l'article tu pourras définir la valeur de ce champ pour indiquer si l'article est public ou non (en ajoutant bien entendu le champ au formulaire). Pour ce faire, soit tu modifies manuellement le code de ton entité Article, soit tu utilises la commande du MakerBundle : php bin/console make:entity Article

    Ensuite dans ton contrôleur, il faudra vérifier si l'utilisateur courant est authentifié ou non, par exemple : $user = $this->getUser();
    Puis utiliser cette information pour récupérer soit tous les articles, soit uniquement ceux identifiés comme publics, avec quelque chose comme ceci : $articleRepository->findAllVisibleArticles($user ? true : false);

    Il faudra donc écrire cette nouvelle fonction dans ArticleRepository, pour adapter la requête à ton besoin (et remplacer l'usage de findAll()), à la place il faudrait quelque chose comme ça :

    Code php : 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
    findAllVisibleArticles(bool $private)
    {
            if ($private) { // utilisateur authentifié, récupère tous les articles
                return $this->createQueryBuilder('a')
                    ->getQuery()
                    ->getResult()
                ;
            }
     
            // utilisateur non authentifié, récupère uniquement les articles publics
            return $this->createQueryBuilder('a')
                ->andWhere('a.public = :val')
                ->setParameter('val', true)
                ->getQuery()
                ->getResult()
            ;
    }
    Il est certainement possible d'obtenir le même résultat de plusieurs manières possibles (et probablement de manière plus élégante), mais ça devrait te donner des pistes à améliorer éventuellement par la suite. Enfin tu peux lire la documentation à ce sujet qui évoque les différents systèmes possibles pour gérer les accès à des pages/ressources : https://symfony.com/doc/current/secu...-authorization

  3. #3
    Membre du Club
    Homme Profil pro
    Clavardeur en tout genre
    Inscrit en
    Août 2019
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Clavardeur en tout genre

    Informations forums :
    Inscription : Août 2019
    Messages : 60
    Points : 59
    Points
    59
    Par défaut
    Un grand merci Thomas pour ton aide. C'est plus clair maintenant je vois mieux l'approche et comment réaliser cela, j'étais coincé sur la conception , à moi de jouer maintenant.

    Explications très claires et efficaces, merci encore pour ton temps et bonne journée !


    Je post la solution que j'envisage sur la base des conseils donnés : J'ai ajouté une boolean isPrivate dans mon entité pour ensuite ajouter les conditions avec Twig sur la page concernée :

    Code twig : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    {% if app.user and article.isPrivate %}
                        <div>
                            {{ article.content | raw }}
                        </div>
                    <br>
                        <a href="{{ path('blog_usershow',{'id': article.id}) }}" class="btn btn-primary">Lire la suite</a>
                    {% else %}
                        <div> Merci de vous connecter pour lire la suite</div>
                    {% endif %}

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/08/2007, 10h52
  2. [SQL] Affichage de news par date de 2 facons ?
    Par innova dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 31/12/2006, 18h27
  3. Affichage de news
    Par artifrui dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 11/11/2006, 11h01
  4. [Système] affichage de news
    Par max55 dans le forum Langage
    Réponses: 15
    Dernier message: 28/07/2006, 17h53
  5. [Oracle] Affichage de news
    Par jenny50 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 24/01/2006, 14h05

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