Dans le billet je vais vous montrer une façon parmi tant d’autres pour gérer le behavior génialissime disponible à cette adresse:  http://www.meiocodigo.com/projects/meioupload/
Je vous conseille également de coupler MeioUpload avec Nate’s phpThumb Component qui permet de générer via les librairies PHP des miniatures.
Le but de ce behavior est de se détacher complètement de la gestion de l’upload de fichier. Il intègre toutes les fonctionnalités liées à l’upload de fichier comme:
- Gestion des extensions autorisées
- Gestion du répertoire d’upload
- Gestion de la taille maximum d’un fichier
- etc…
Le problème (ou pas) d’un behavior, c’est qu’il est associé et chargé à l’appel d’un modèle. Si on possède deux tables de notre modèle qui ont respectivement un champs d’image qui utilise MeioUpload, on se retrouve avec un conflit de Behavior. Le premier modèle chargé spécifiera la configuration du behavior et donc lors de l’upload par le second modèle, le fichier sera traité selon les paramètres de la première configuration. Pour en savoir plus sur les Behaviors je vous invite à consulter le site officiel de CakePHP.
Utiliser le behavior
Il suffit de déclarer la variable $actAs dans le modèle en suivant la configuration du site officiel.
var $actAs = array('MeioUpload');
Définir la configuration MeioUpload
Je pars du principe que MeioUpload est déjà installé sur votre projet. Si ce n’est pas le cas suivez le guide du site officiel.
Nous allons dans chaque modèle définir une variable qui contiendra la configuration du behavior. Pour l’exemple j’ai pris le nom de variable myMeioUpload.
<?php
class Membre extends AppModel {
// Some stuff
var $myMeioUpload = array(
'image' => array(
'dir' => 'img{DS}VOTRE{DS}CHEMIN',
'create_directory' => true,
'allowed_mime' => array('image/jpeg', 'image/jpeg', 'image/png', 'image/bmp'),
'allowed_ext' => array('.jpg', '.jpeg', '.png', '.bmp'),
'thumbsizes' => array(
'normal' => array('width'=>500, 'height'=>500),
'mini' => array('width'=>200, 'height'=>200),
'minimini' => array('width'=>50, 'height'=>50),
),
'default' => 'default.jpg',
)
);
Une fois cette config créé, il suffit de charger dynamiquement ces paramètres avant chaque utilisation du modèle.
Chargement des configurations
Pour ce faire j’utilise la méthode beforeFilter() du contrôleur qui peut être surchargée. Le but de cette méthode est d’effectuer certaines actions avant le traitement des données du contrôleur. C’est entre autre pour gérer la configuration de certains composants que cette méthode voit son utilité. Dans notre cas, on va venir indiquer au Behavior la bonne configuration, c’est à dire celle du modèle $myMeioUpload.
<?php
class MembresController extends AppController {
// Some stuff
function beforeFilter() {
parent::beforeFilter();
$this->Membre->Behaviors->attach('MeioUpload', $this->Membre->myMeioUpload);
}
Voilà la bonne config sera utilisée pour vos contrôleurs.
Bon dév’ :D









