Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 07-12-2009 17:29:59

Loic71
Nouveau membre
Date d'inscription: 01-12-2009
Messages: 6

Architecture MVC et composant SWFUpload pour multi upload

Bonjour,

J'essaye d'intégrer un composant de multi uploadage SWFUpload. Cependant, je bloque avec l'architecture MVC car tous appels d'url doit être passé au dispatcher "index.php" qui transmet au controlleur et a son action. Or, le composant SWFUpload (en javascript) a des paramètres à spécifier, comme le script php qui upload tous les fichiers. Seulement, ce script php est appelé en interne par javascript et n'est pas passé au dispatcher.

Actuellement, si mon script php n'est pas visible depuis mon javascript, j'obtiens une erreur 406, entete not acceptable

Pouvez vous m'aider?

Merci

Hors ligne

 

#2 08-12-2009 11:05:25

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: Architecture MVC et composant SWFUpload pour multi upload

Salut,

Tu peux utiliser un parser JSON du côté Javascript et utiliser le ContextSwitch côté zend.

Exemple:

Contrôleur:

Code:

public function init()
{
    parent::init();

    $contextSwitch = $this->_helper->getHelper('contextSwitch');
    $contextSwitch->setAutoJsonSerialization(false)
                  ->addActionContext('upload', 'json')
                  ->initContext();
}

public function postDispatch()
{
    // pour avoir accès à l'objet response dans la vue
    // et pouvoir setter les headers
    $this->view->response = $this->_response;
    parent::postDispatch();
}

public function uploadAction()
{
    $upload = new Zend_File_Transfer_Adapter_Http();
    $fileDest = str_replace(chr(92), '/', UPLOAD_TEMP_PATH);
    $upload->setDestination($fileDest);

    //$upload->addValidator('Size', false, 20000)
    //           ->addValidator('IsImage', false, array('image/jpeg', 'image/png'));               

    $id = uniqid(); 
    $fileTmpName = $fileDest . '/' . $id;
    $upload->addFilter('Rename', $fileTmpName);
    
    if (!$upload->receive()) {
        $uploadResult = array(
            'success' => false,
            'messages' => $upload->getMessages()
        );
    }
    else {
        // traitement
        $uploadResult = array(
            'success' => true,
            'id' => $id,
            'url' => $this->view->serverUrl() . UPLOAD_TEMP_URL
        );
    }

    $this->view->uploadResult = $uploadResult;
}

Vue:
(nom-script.json.phtml)

Code:

<?php
$this->response->setHeader('Content-Type', 'application/json'); 
if (false === (bool)$this->uploadResult['success']) :
    $this->response->setHttpResponseCode(400); // bad request       
else :
    $this->response->setHttpResponseCode(201); // ok created
endif;

echo $this->json($this->uploadResult);

Javascript :

Code:

uploadError: function(file, code, message) {
    // erreur
},

uploadSuccess: function(file, serverData, response) {
    var jsonResponse = JSON.parse(serverData);
    // traitement sur la reponse en json
}

Tu trouveras un parser JSON ici : http://www.json.org/js.html en bas de page.


A+ benjamin.


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages