Bonjour,

J'ai installé le plugin Media sur mon site web. En local, wamp (php 5.3.4), aucun problème tout fonctionne parfaitement.
Par contre, j'ai uploadé sur mon hébergement 1and1 et là, catastrophe !
J'ai une erreur fatale :
Fatal error: Class 'String' not found in .../app/Plugin/Media/Model/Behavior/MediaBehavior.php on line 69

J'ai cherché, peut-être pas assez, mais j'avoue que les petites solutions que j'ai trouvés n'ont pas solutionné mon problème.

Sur 1and1 je suis en PHP 5.4.4.

Si vous pouvez m'aider, j'en serai ravi !

Merci à tous.

Eric.

4 réponses


ocir
Auteur
Réponse acceptée

Alors, ne m'avouant pas vaincu pour autant, j'ai continué à chercher. Et pour le fait, j'ai trouvé ! Comme quoi.

Bref, je vous livre donc la solution qui fonctionne pour moi.
Je rappelle que je suis hébergé chez 1and1.

Version de PHP 5.4.4
Version de CackePHP : 2.1.0

Ce que vous devez changer pour que cela fonctionne :
Dans le fichier app/plugin/media/model/model.php

function afterFind($data)

devient :

function afterFind($data, $primary = false)

Et dans le fichier app/plugin/media/model/behavior/mediabehavior.php

public function setup($model, $options = array())

devient :

public function setup(Model $model, $options = array())

public function afterSave($model)

devient :

public function afterSave(Model $model, $created)

public function afterFind($model, $data)

devient :

public function afterFind(Model $model, $data, $primary)

Voilà. J'espère que cela fonctionnera pour vous.

Merci de votre aide.

A+

Eric.

Salut,
Il ne manquerait pas une accolade '}' quelque part ?
Sinon post ton MediaBehavior.php
A+

le passage de wamp à un serveur c'est parfois des erreurs de casse ou un / qui doit être un .
Bonne chance à toi ^^'

ocir
Auteur

Salut,

Merci pour vos réponses.
J'ai regardé les '}' et les histoires de majuscules. A première vue, rien de ce côté.

Pour info, j'ai commenté dans le mediaBehavior.php toutes les fonctions et là cela fonctionne (avec des erreurs).
Dès que je supprime les commentaires sur les fonctions "setup", "afterSave" ou "afterFind", l'erreur est de retour.

Je suppose donc que le soucis vient de là.

Si vous avez une idée.

Eric.

Voici le behavior :

<?php
class MediaBehavior extends ModelBehavior {
    private $options = array(
        'path' => 'uploads/%y/%m/%f',
        'formats' => false
    );

    public function setup($model, $options = array()) {
        $model->medias = array_merge($this->options, $options);

        $model->hasMany'Media'] = array(
            'className' => 'Media.Media',
            'foreignKey'    => 'ref_id',
            'order' => 'Media.position ASC',
            'conditions'    => 'ref = "'.$model->name.'"',
            'dependent' => true
        );

        if($model->hasField('media_id')){
            $model->belongsTo'Thumb'] = array(
                'className' => 'Media.Media',
                'foreignKey' => 'media_id',
                'conditions' => null,
                'counterCache'=> false
            );
        }
    }
    public function afterSave($model){
        if(!empty($model->data$model->name]'thumb']'name'])){
            $file = $model->data$model->name]'thumb']; 

            // Current thumb
            $media_id = $model->field('media_id');
            if($media_id != 0){
                $model->Media->delete($media_id); 
            }
            // Upadte thumb
            $model->Media->save(array(
                'ref_id' => $model->id,
                'ref' => $model->name,
                'file' => $file
            ));
            $model->saveField('media_id',$model->Media->id);
        }
    }
    public function afterFind($model,$data){
        foreach($data as $k=>$v){
            // Thumbnail
            if(isset($v'Thumb']'file'])){
                $v$model->name]'thumb'] = $v'Thumb']'file'];
                $v$model->name]'thumbf'] = $v'Thumb']'filef'];
            }
            if(!empty($v'Media'])){
                $v'Media'] = Set::Combine($v'Media'],'{n}.id','{n}');
            }
            if( !empty($v$model->name]'media_id']) && isset($v'Media']$v$model->name]'media_id']]) ){
                $media_id = $v$model->name]'media_id'];
                $v$model->name]'thumb'] = $v'Media']$media_id]'file'];
                $v$model->name]'thumbf'] = $v'Media']$media_id]'filef'];
            }
            $data$k] = $v;
        }
        return $data;
    }
}