Sujet : Hoa_Cache problème d'enregistrement du cache

Hey,

Je suis en train de m'amuser avec ton Framework. Je crée un petit site avec une base de donnée et une page récupère des vidéos via le package Hoa_VideoPlayer de tetardo.

J'ai mon controller qui fait appel à une classe qui me gère les vidéos.
La méthode $this->view->videos = $videos->showAllVideos(); me retourne le code html avec toute les vidéos dedans.

Sans le cache tout marche bien.

Voici mon code :

<?php
import('Cache.~');

/**
 * IndexController
 *
 * @package
 * @author darche
 * @copyright Copyright (c) 2009
 * @version $Id$
 * @access public
 */
class VideosController extends Hoa_Controller_Action_Standard {

    public function IndexAction(){
        # Gestion du cache
        $frontendOptions = array(
            'lifetime' => 600
        );
        
        $backendOptions = array(
            'cache_directory' => $this->config->rep->cacheDirectory.'/'
        );
        $cache = Hoa_Cache::factory('Output', 'File', $frontendOptions, $backendOptions);
        
        # Affichage des vidéos
        if($cache->start('cacheVideo')) {
            require_once 'Video.php';    //import('Video');
            $videos = new Video($this);
            $this->view->videos = $videos->showAllVideos();
            $cache->end();
        }

        # Chargement des variables dans la vue
        $this->view->config = $this->config;
        $this->view->titre = 'Vidéos';
        $this->view->head     = $this->head;
        echo $this->view->render();
    }
}

Lors du test de ce code la page fonctionne très bien.
=> création du cache dans mon répertoire (normal)

et par contre quand je actualise la page rien en retour ...

J'ai essayer d'utiliser le cache en mode Class mais comme j'avait besoin de paramétrer ma classe lors de son instance ce n'était pas la bonne méthode.
J'ai même essayer en mode Function mais sa me semblait pas logique du tout donc j'en revient à la méthode que je vous ait montré dans le code ci-dessus.

Merci à tout le monde pour vos futurs réponses.

En espérant que j'harcèle pas trop l'admin avec mes questions.

Je dois peux être attendre avant de continuer à parcourir le cache ?!

hmm sad

" L'imagination est plus importante que la connaissance. La connaissance est limitée alors que l'imagination englobe le monde entier, stimule le progrès, suscite l'évolution. " - Life in the cloud :: Getting Started with Hoa - Hoa débutant

2

Re : Hoa_Cache problème d'enregistrement du cache

Hey smile,

Bah clairement, tu dois utiliser le cache de classe. As-tu essayé avec l'exemple donné dans la documentation (Cache depuis une classe) ?

Ça donnerait quelque chose du genre :

$cache = Hoa_Cache::factory('Class', 'File');
$cache->setObject('Video');
$cache->__construct($this);
$this->view->videos = $cache->showAllVideos();

Je n'ai pas testé, et c'est possible que ça ne marche pas, mais essaye, on verra bien smile.

« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

3

Re : Hoa_Cache problème d'enregistrement du cache

Salut Hywan,

J'ai vu ça avec lui, c'est mon petit frangin ^^
Je lui ai dit de faire la mm chose.

Le code c'est comme le paic citron, quand il y en a plus... il y en a encore !

Re : Hoa_Cache problème d'enregistrement du cache

Yop,

Oui j'ai essayer le cache de Class mais je vais me remettre dessus plus tard car la demain j'ai contrôle de SE sad Que du part coeur !

" L'imagination est plus importante que la connaissance. La connaissance est limitée alors que l'imagination englobe le monde entier, stimule le progrès, suscite l'évolution. " - Life in the cloud :: Getting Started with Hoa - Hoa débutant

5

Re : Hoa_Cache problème d'enregistrement du cache

Bonne chance alors wink.

« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Re : Hoa_Cache problème d'enregistrement du cache

Hey la communauté big_smile,

Voila j'ai réessayé de mettre le cache depuis une classe, mais sa ne marche toujours pas :

Voila mon contrôleur VideosController qui appel ma classe Video

<?php
import('Cache.~');
/**
 * IndexController
 *
 * @package
 * @author darche
 * @copyright Copyright (c) 2009
 * @version $Id$
 * @access public
 */
class VideosController extends Hoa_Controller_Action_Standard {

    public function IndexAction(){

        # Gestion du cache
        $frontendOptions = array(
            'lifetime' => 600
        );
        $backendOptions = array(
            'cache_directory' => $this->config->rep->cacheDirectory.'/'
        );
        require_once 'Video/Video.php'; // import('Video');
        $cache = Hoa_Cache::factory('Class', 'File', $frontendOptions, $backendOptions);
        $cache->setObject('Video');

        # Chargement des variables dans la vue
        $videos = $cache->showAllVideos();
        $this->view->videos = $videos;

        # Chargement des variables dans la vue
        $this->view->config = $this->config;
        $this->view->titre = 'Vidéos';
        $this->view->head     = $this->head;
        echo $this->view->render();
    }
}

Et voila ma classe Video:

<?php
import('Database.Dal.~');
import('VideoPlayer.~');
require_once('IVideo.php');

class Video implements IVideo{

    private $nameInBase = 'video';
    private $fram;


    /**
     * Video::showAllVideos()
     *
     * @return $videos : html avec les vidéos
     */
    public function showAllVideos(){
        # Select base de donnée des vidéos
        try {
            $statement = null;
            $statement = $this->fram->db->query('SELECT SQL_CACHE serveur, id_serveur FROM '.$this->nameInBase.' ORDER BY id');
            if(DEBUG) {
                echo '<pre>';
                    print_r($statement->fetchAll());
                echo '</pre>';
            }
            $arrayVideo = $statement->fetchAll();
        } catch ( Hoa_Database_Dal_Exception $e ) {
            $e->raiseError();
        }
        # Création du html des players
        try {
            $videos = '';
            foreach($arrayVideo as $key => $val){
                $param = array(
                    'server' => array(
                        'server' => $arrayVideo[$key]['serveur'],
                        'id' => $arrayVideo[$key]['id_serveur']
                    ),
                    'player' => array(
                        'width' => 800,
                        'height' => 500
                    )
                );
                $videos .= $this->player($param);
            }
        } catch ( Hoa_Exception $e ) {
            $e->raiseError();
        }
        return $videos;
    }

    private function player ( array $param ) {

        $player = new Hoa_VideoPlayer($param);
        return '<div class="video">'.$player->__tostring().'</div>';

        if (DEBUG) {
            echo '<br />';
            echo '<br />Nom du serveur: '.$player->getServerName();
            echo '<br />Id de la video: '.$player->getVideoId();
            echo '<br />URL de la video: <a href="'.$player->getVideoUrl().'" target="_blank">'.$player->getVideoUrl().'</a>';
            echo '<br />Parametre du player: <pre>'.print_r($player->getPlayerParam(), true).'</pre>';
            echo '<br />Parametre du server: <pre>'.print_r($player->getServerParam(), true).'</pre>';
            echo '<br />Code HTML: <pre style="background:#EFEFEF;">'.htmlentities($player).'</pre>';
            echo '<hr />';
        }
    }

    public function toto(){
        echo 'toto';
    }
}
?>

J'ai tester dans mon controller : à la place d'appeler la méthode showAllVideos() de ma classe Video, j'ai appelé la méthode toto() qui me retourne un echo basic.
Le cache à très bien marché.

Donc il n'y a pas de raison que sa marche pas

mon problème est que je voudrai pouvoir utiliser le framework pour pouvoir utiliser Hoa_Database_Dal dans ma classe Video car ma connection (Hoa_Database_Dal::getInstance) se fait à la racine du site (index.php).

Donc pour cela ce qui me paru logique c'était de passer en paramètre, dans la méthode showAllVideos(), le framework soit:

$cache-> showAllVideos($this);

Mais là, une erreur s'affiche directement sans même rentrer dans la méthode :
Fatal error: Exception thrown without a stack frame in Unknown on line 0

Pour le moment je vais faire une connection manuelle dans ma classe Video en attendant vos réponses.

Merci beaucoup bonne journée

" L'imagination est plus importante que la connaissance. La connaissance est limitée alors que l'imagination englobe le monde entier, stimule le progrès, suscite l'évolution. " - Life in the cloud :: Getting Started with Hoa - Hoa débutant

Re : Hoa_Cache problème d'enregistrement du cache

J'ai même essayer

$cache = Hoa_Cache::factory('Class', 'File');
$cache->setObject('Video');
$cache->__construct($this);
$this->view->videos = $cache->showAllVideos();

Mais rien à faire il aime pas du tout le $this en paramètre

Même erreur :
Fatal error: Exception thrown without a stack frame in Unknown on line 0

" L'imagination est plus importante que la connaissance. La connaissance est limitée alors que l'imagination englobe le monde entier, stimule le progrès, suscite l'évolution. " - Life in the cloud :: Getting Started with Hoa - Hoa débutant

8

Re : Hoa_Cache problème d'enregistrement du cache

Hey smile,

Tu peux m'envoyer par e-mail ton code car je ne comprends pas cette erreur et elle ne provient pas de Hoa.

« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Re : Hoa_Cache problème d'enregistrement du cache

Merci d'avoir répondu rapidement, tetardo va m'envoyer un exemple avec un modèle en plus de ma classe. Je vais test juste après. Si sa marche pas je t'envoi le code par mail.

" L'imagination est plus importante que la connaissance. La connaissance est limitée alors que l'imagination englobe le monde entier, stimule le progrès, suscite l'évolution. " - Life in the cloud :: Getting Started with Hoa - Hoa débutant

10

Re : Hoa_Cache problème d'enregistrement du cache

Hey,

Voici un exemple d'organisation pour ton application.
Je pense qu'en ajoutant ton modèle de contrôleur au cache comme dans la doc tu ne devrais pas avoir de soucis.


Une classe pour gérer les videos

Class Video Editeur
       Lire      
       Ajouter
       Modifier
       Supprimer

Une classe pour gérer la sélection de vidéos
Les méthodes renvoi des array des vidéos

Class Video Selection
       Récupérer videos d'un utilisateur       
       Récupérer x dernieres videos
       Récupérer x dernieres vidéos d'une catégorie
       Récupérer x meilleurs vidéos d'une catégorie
       Récupérer x meilleurs vidéos d'une catégorie
       ...

Un model pour contrôleur
Cette classe étend la classe Video Selection pour récupérer les vidéos en base puis pour générer les portions HTML

Class Contrôleur Video Model extends Video Selection {
       
        function __construct ( $nom_de_methode, $x ) {

           $data = parent::$nom_de_methode ( $x );
           foreach($data...) {
             $html = Hoa_Video......
           }

           return $html;
       }

}

Un contrôleur de vidéos
Chaque méthode appelle le model avec la methode de la classe Video Selection souhaitée
C'est la que tu peux lancer le cache
Ajouter le model au cache
Puis envoyer ton résultat a la vue

Class Video Controller
       Index Action
       Nouveautés Action
       ... Action

Une vue pour le controleur

<h1>Videos <?php echo $this->view->titre; ?></h1>
<?php echo $this->view->videos; ?>

Je pense que toutes les interrogations que tu peux avoir sont dans la doc (cache, passage d'une variable à la vue, etc)

Dans mon exemple tu as une classe Video Selection
Mais tu peux en imaginer plusieurs dans le mm genre pour gérer ton application :

- Video Commentaire
- Video Note

Voilou smile

N'hésite pas si tu bloques....

Dernière fois dit par tetardo (10 Oct. 2009 01:48)

Le code c'est comme le paic citron, quand il y en a plus... il y en a encore !