web-dev-qa-db-fra.com

Gestion des fichiers de développement Joomla 3.4

Je fabrique un composant MVC de base, principalement en suivant le tutoriel HelloWorld. J'ai créé un formulaire contenant un bouton de téléchargement et une entrée de type "fichier". Le formulaire se charge très bien, mais lorsque je télécharge un fichier, je ne parviens pas à enregistrer et à ouvrir le fichier pour le traitement. J'ai essayé plusieurs approches mais aucune n'a fonctionné. Comment traite-t-on le téléchargement de fichier téléchargé?

Manette:

class CabControllerCab extends JControllerLegacy {

public function upload(){

    $input = JFactory::getApplication()->input;
    $file = $input->files->get('fileData'); 

    var_dump($file); // does not work, returns null
    }
}

Modèle:

class CabModelCab extends JModelAdmin{
public function getForm($data = array(), $loadData = false)
{
    $form = $this->loadForm(
        'com_cab.cab',
        'cab',
        array(
            'control' => 'jform',
            'load_data' => $loadData)
    );

    if (empty($form)){
        print 'empty form';
        return false;
    }

    return $form;
    }
}

model/forms/cab.xml

<?xml version="1.0" encoding="UTF-8"?>
<form>
<fieldset>
    <field
    name="fileData"
    type="file"
    label="COM_CAB_CAB_FILE_LABEL"
    description="COM_CAB_CAB_FILE_DESC"
    size="40"
    class="inputbox"
    default=""
    />
</fieldset>
</form>

view.html.php

class CabViewCab extends JViewLegacy {
public function display($tpl = null){

    // get the Data
    $form = $this->get('Form');

    // Assign the Data
    $this->form = $form;

    $this->addToolbar();

    parent::display($tpl);
    }

protected function addToolbar(){
    JToolbarHelper::title('Import Members');
    }
}

tmpl/default.php

<h1>Default View Layout</h1>
<form action="<?php print JRoute::_('index.php?option=com_cab&view=cab&task=upload')?>"
method="post" name="adminForm" id="adminForm" enctype="multipart/form-data">
<div class="form-horizontal">
    <fieldset>
        <legend>Legend</legend>
        <div class="span6">
            <?php foreach ($this->form->getFieldset() as $field)?>
            <div class="control-group">
                <div class="control-label">
                    <?php print $field->label; ?>
                </div>
                <div class="controls">
                    <?php print $field->input; ?>
                    <button id="upload-submit" class="btn btn-primary">
                        <i class="icon-upload icon-white"></i>
                        Start Upload
                    </button>
                </div>
            </div>
        </div>
    </fieldset>
    <div>
    <input type="hidden" name="task" value="cab.upload" />
        <?php echo JHtml::_('form.token'); ?>
    </div>
</div>
</form>
3
user4006

Je l'ai compris en étudiant un autre composant doté d'une fonction de téléchargement de base. Je devais faire le changement suivant dans mon contrôleur.

public function upload() {
    $app = JFactory::getApplication();

    $data = $app->input->files->get('jform', array (), 'array');

    $fileName = $data ['fileData'] ['name'];
    $tmpFileName = $data ['fileData'] ['tmp_name'];

    // handle the file here
}
2
user4006