Bonjour,

J'essaie de faire un système qui affiche des choses :) cela peut être du texte, des images, des vidéos,... Certaines de ces choses ne sont accessibles que par mot de passe.

Lorsque l'utilisateur saisit le mot de passe, je stocke en session, dans un tableau les IDs des items dont le mot de passe a été donné en faisant un Session::push($modelName, $id);.

Dans ma vue, lorsque j'affiche la liste des items, je veux afficher une image prédéfinie si l'image est protégée et le mot de passe non saisi ou bien l'item.

je fais donc

@if ( ($media->password != '') AND (! Session::has('Media', $media->id)) )
    <img src="/images/lock.png" alt="" width="200"/>
@else
    <img src="{{ getMediaThumbnailURL($media) }}" alt=""/>
@endif

Le seul soucis est que dès lors où je donne le mot de passe d'un item, tous les items sont affichés. J'en déduis donc qu'il ne prend pas en compte le 2e paramètre de Session::has().

Si quelqu'un a une idée, je suis preneur :)

7 réponses


lolotoobo
Auteur
Réponse acceptée

J'essaie de maintenir au max mes projets à jours mais ce n'est pas toujours évident :)

Sinon j'ai résolu mon soucis en faisant une nouvelle fonction dans mon helper. Au cas où cela puisse intéresser du monde.

Dans mon helper.php

/**
 * Return the url of the thumbernail of an item.
 *
 * @param $media
 * @param string $model Model item
 *
 * @return string URL of the thumbernail
 */
function getMediaThumbnailImage($media, $model='Media')
{
    $items = Session::has($model) ? Session::get($model) : [];

    // If image protected by a password and not already unlocked within session return the lock image url
    if ( ($media->password != '') AND (! in_array($media->id, $items))  ) {
        return 'images/lock.png';
    }

    return getMediaThumbnailURL($media);
}

Dans ma vue je l'appelle en faisant

<img src="{!! getMediaThumbnailImage($media) !!}" alt=""/>

Salut,

Pour commencer, sur quel version de Laravel travailles-tu ?

Coucou betaWeb,

Je suis sur la dernière version : 5.2.23

C'est normal, la méthode has() n'accepte qu'un seul paramètre, et tu lui en passe deux (pourquoi ?).
Doc : https://laravel.com/docs/5.2/session

Je l'ai sorti d'un bout de code ou une doc mais ne me demande pas où car c'est assez vieux :(

Tu confirmes mes dires car ce matin le site de Laravel était down.

Je suis toujours preneur d'une idée, d'un bout de code de quelqu'un qui a déjà codé ça

Beh si c'est un "vieux" bout de code, c'est normal que ça ne fonctionne pas, car celui-ci évolue au fil des versions. Il faut toujours se référer à la doc de la version sur laquelle on travaille.

Dans ton cas tu dois faire :

if ($request->session()->has('Media')) {
    // ... code ...
}

Super, tu peux passer ton sujet en résolu à ce moment là ;)