1. Inicio
  2. Documentos
  3. JavierBuildForm
  4. Mostrar formulario
  5. Controller

Controller

El caso común es tener una clase padre del cual hereden los otros controllers de cada tipo de checklist, en caso sea solo uno, puede implementarlo directamente, pero seria mejor tenerlo como una clase genérica para dejarlo abierto a mas tipos.

<?php
namespace App\Http\Controllers\Web\CheckList\_generalCovid;

use App\Models\CheckList;
use Javier\BuildForm\Controller\Web\WebJavierFormShowLineamientosController;


/**
 * Class WebParentGeneralCovidController
 * @package App\Http\Controllers\Web\CheckList\_generalCovid
 * author twiter @JavierTwiteando
 *
 * Clase generica para lso checklist tipo covid
 * para el renderizado
 */
class WebParentGeneralCovidController extends WebJavierFormShowLineamientosController
{

    /*ini CONFIG*/
    public function getNameConfigFile($tipo){
        return \ConstantesCheckListTipo::getOptionsAlternative("name_file_config")[$tipo];
    }

    /**
     * @param $javierFormId
     * @throws \Exception
     */
    public function getConfigByFormId($javierFormId)
    {
        //TODO especificar
        //return $this->getConfig($this->getNameConfigFile(\ConstantesCheckListTipo::OFICINAS));
        throw new \Exception("Debe especificar el ID del tipo");
    }

    /**
     * @param $javier_formId
     * @throws \Exception
     */
    public function getDomainSaveInstance($javier_formId)
    {
        //TODO especificar
        //return new DomainCheckListOficinaSave();
        throw new \Exception("Debe especificar el ID del Dominio");
    }

    /**
     * @throws \Exception
     */
    public function getRoutPost(){
        //TODO especificar
        //return "admin/formulario/oficinas/show/items";
        throw new \Exception("Debe especificar la ruta del post");

    }
    /*fin CONFIG*/

    //
    public function list($javierform_id,$checklist_cumple=null){
        try{

            //dd($checklist_id,$checklist_cumple);
            $checklist = CheckList::query()->where(CheckList::JAVIERFORM_ID,$javierform_id)->first();
            $checklist = CheckList::cast($checklist);


            $checkListConfig = $this->getConfig($this->getNameConfigFile($checklist->tipo));

            //dd($checklist->estado == \ConstantesCheckListEstado::ABIERTO);
            $responseHtml = $this->getListResponse(
                $checkListConfig,
                $checklist->JavierForm_id,
                $checklist_cumple==2,
                $checklist->estado == \ConstantesCheckListEstado::ABIERTO,
                [],
                $this->getRoutPost()
            );

            $responseData = [
                CheckList::meta__id()->column_form_name=>$checklist->id,
                CheckList::meta__estado()->column_form_name=>$checklist->estado
            ];


            return view('_javier/javierform/show/lineamientos',array_merge($responseHtml,$responseData));

        }catch (\Exception $ex){
            return $this->makeViewException($ex);
        }
    }
}

Métodos:

getNameConfigFile , este método retorna el nombre del archivo de configuración ( xxx.json ), para mas detalle revisar la sección “Archivos de configuración”, en este caso se obtiene del método

getOptionsAlternative()

que implementa la constantes para obtener datos de las anotaciones, la clase constante debe heredar de ConstantesOptionBase por ejemplo :

class ConstantesCheckListTipo extends ConstantesOptionBase{
...    
    /**
     * @label Lista de Verificación
     * @name_file_config xxx_config.json
     */
    const LISTA_VERIFICACION = 6;
...

getConfigByFormId , en este caso no usa el parámetro JavierFormId, el método debe retornar la configuración en un array, una opción es usar el método comentado getConfig , que recibe el nombre del archivo, lo buscara en

storage/buldform/config

getDomainSaveInstance , debe retornar una instancia de la clase que implementara el dominio, que implementa la lógica del grabado de respuestas, revisar la subsección Dominio

getRoutePost, retorna la ruta base que se usará para cualquier otro método que se use en el formulario, Save,Finish, uploadFile, etc, que se registraran como {rutaPostBase/save}, {rutaPostBase/finish}, etc.

list, el método principal, que es llamado al momento de mostrar el formulario.

En el se llama a la tabla principal, esta parte no se pudo generalizar ya que cada sistema puede tener su lógica de cuando se puede editar, ya sea por tiempo, rol, tipo, etc.

Con los datos principales se llama al método getListResponse , abajo se listan los parámetros

/**
     * @param array     $config         archivo de configuración
     * @param int       $javierFormId   Id de JavierForm asociado a la tabla principal
     * @param boolean   $llenar         indica si se debe mostrar las preguntas respondidas
     * @param boolean   $puedeEditar    indica si puede editar o solo ver el formulario
     * @param array     $menu           lista de opciones que se muestra en la parte superior
     * @param string    $postBase       ruta base para las llamadas al servidor desde el formulario
     * @return array    parametro para la vista del formulario
     * @throws \Exception
     */
    public function getListResponse(
        $config,
        $javierFormId,
        $llenar,
        $puedeEditar,
        $menu,
        $postBase,
        $mostrarAutoResponder=true,
        $mostrarSave=true
    )
    {....}

Finalmente se agrega algunos parámetros adicionales propios de la tabla principal y se combinan con las del método general, la vista por defecto usada es

_javier/javierform/show/lineamientos

Se puede cambiar heredando o copiando de la vista maestra, revisar subseccion Vistas.