Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
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
Salut,
Tu peux utiliser un parser JSON du côté Javascript et utiliser le ContextSwitch côté zend.
Exemple:
Contrôleur:
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)
<?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 :
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.
Hors ligne