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

Bibliothèques et frameworks PHP Discussion :

Définition de l'interface d'une classe Upload


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre averti

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    638
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 638
    Points : 408
    Points
    408
    Par défaut Définition de l'interface d'une classe Upload
    Bonjour,

    Je poste ici car il s'agit de la définition d'une bibliothèque.

    J'écris une classe Upload pour gérer les envois de fichiers. Cette classe vise à encapsuler l'accès à la variable $_FILES et aux fonctions PHP comme move_uploaded_file(), et à gérer facilement les erreurs.

    Or je m'interroge sur la manière de définir l'interface de cette classe et notamment la façon de récupérer les erreurs.

    Au début je suis simplement parti sur le fonctionnement suivant :

    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
    $upload = new Upload( 'inputfile' );
    //définition de la taille maximale
    $upload->maxSize = '100k';
     
    //image valide ?
    if ( !$upload->isImage() ) {
        $this->flash->error( $i18n->__( 'invalid_image' ) );
    //taille du fichier
    } else if ( !$upload->isBelowMaxSize() ) {
        $this->flash->error( $i18n->__( 'too_big_file' ) );
    //autre erreur (par exemple UPLOAD_ERR_CANT_WRITE)  
    } else if ( !$upload->hasError() ) {
        $logger->write( $e->getMessage() );
        $this->forward( 'error', 'error', '500' );
    }

    Ensuite, j'ai envisagé le fonctionnement suivant (utilisant des exceptions) :
    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
    18
    19
    20
    21
    22
    23
    24
     
    $destination = ROOT_DIR . 'var';
    $upload= new Upload( 'myfile' );
    $this->filename = $upload->getFileName();
     
    $upload->allowedMIMETypes=array('image/jpeg', 'image/jpg', 'image/png', 'image/gif', 'image/bmp');
    $upload->maxSize = 100000;
     
    try {
        $upload->upload( $destination );
    } catch (Exception $e) {
        $type=get_class($e);
        switch ($type) {
            case 'UploadSizeException' :
                $this->flash->error( $i18n->__( 'too_big_file' ) );
                break;
                case 'FileFormatException' :
                $this->flash->error( $i18n->__( 'too_big_file' ) );
                break;
            default:
                $logger->write( $e->getMessage() );
                $this->forward( 'error', 'error', '500' );
        }
    }
    Qu'en pensez-vous ? Quelle approche vous semble la plus simple, la plus propre, la plus cohérente ? Est-ce une bonne idée de lever des exceptions ?

  2. #2
    Membre averti

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    638
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 638
    Points : 408
    Points
    408
    Par défaut
    J'ai une autre idée :

    Code : 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
    18
    19
     
    $destination = ROOT_DIR . 'var';
    $upload= new Upload('myfile' );
    $this->filename = $upload->getFileName();
     
    $upload->allowedMIMETypes=array('image/jpeg', 'image/jpg', 'image/png', 'image/gif', 'image/bmp');
    $upload->maxSize = 100000;
     
    //Upload::process retourne simplement false en cas d'erreur de validation
    if ( !$upload->process( $destination ) ) {
        $this->flash->error( $upload->getMessage() );
        $this->redirect( BASE_URL . 'upload/form' );
     
    //Une exception est retournée pour les autres cas d'erreur
    } catch (Exception $e) {
                $logger->write( $e->getMessage() );
                $this->forward( 'error', 'error', '500' );
        }
    }
    L'utilisation d'une exception est réservée aux cas exceptionnels (erreur d'écriture...).

Discussions similaires

  1. [Débutant] Comment "traduire" les sélections d'une interface dans une classe ?
    Par Masamunai dans le forum VB.NET
    Réponses: 0
    Dernier message: 11/07/2011, 11h35
  2. Réponses: 4
    Dernier message: 09/06/2008, 16h32
  3. Réponses: 4
    Dernier message: 11/04/2008, 11h36
  4. Ajouter une interface dans une classe
    Par Battosaiii dans le forum Langage
    Réponses: 2
    Dernier message: 03/10/2006, 14h02
  5. Séparer la définition et la déclaration d'une classe
    Par prgasp77 dans le forum Langage
    Réponses: 5
    Dernier message: 24/08/2005, 21h37

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