A free and open-source book on ZF3 for beginners

Translation into this language is not yet finished. You can help this project by translating the chapters and contributing your changes.

10.7. Acción de controlador y carga de archivos

En esta sección, con un ejemplo de código breve mostraremos como administrar la subida de archivo con un método de acción en el controlador. Atraeremos la atención del lector a los aspectos específicos de la subida de archivos.

Supongamos que queremos agregar una página web que muestre un formulario (llamémoslo YourForm) capaz de subir archivos. Para esta página, necesitamos agregar el método uploadAction() a la clase controladora:

<?php
//...
class IndexController extends AbstractActionController
{
    // This is the "upload" action displaying the Upload page.
    public function uploadAction()
    {
        // Create the form model.
        $form = new YourForm();

        // Check if user has submitted the form.
        if($this->getRequest()->isPost()) {

            // Make certain to merge the files info!
            $request = $this->getRequest();
            $data = array_merge_recursive(
                $request->getPost()->toArray(),
                $request->getFiles()->toArray()
            );

            // Pass data to form.
            $form->setData($data);

            // Execute file validators.
            if($form->isValid()) {

                // Execute file filters.
                $data = $form->getData();

                // Redirect the user to another page.
                return $this->redirect()->toRoute('application', ['action'=>'index']);
            }
        }

        // Render the page.
        return new ViewModel([
                 'form' => $form
            ]);
    }
}

Como podemos ver en el código de arriba, el método uploadAction() tiene el aspecto usual de una acción de controlador que implementa el flujo de trabajo típico, sin embargo el método tiene algunos aspectos específicos para cargar archivos (estos aspectos se marcan en negritas):

Arriba, en la acción del controlador debemos recordar tres cosas: 1) unir los arreglos super-globales $_POST y $_FILES antes de pasarlos al método del formulario setData(); 2) usar el método del formulario isValid() para revisar la corrección de los archivos subidos (ejecutar validadores); 3) usar el método del formulario getData() para ejecutar los filtros.


Top