miércoles, 4 de diciembre de 2019

Práctica 6: Modificar menú y formulario para agregar contacto


En esta práctica modificaremos el menú de la aplicación para poder accesar a los controladores que ya creamos en ´practicas anteriores. Recordemos que Yii utiliza una plantilla que ya nos provee de un controlador, menú y algunas vistas de ejemplo. Con forme vayamos avanzando en el proyecto necesitaremos modificar estos archivos.

1.       Abriremos el archivo main.php que se encuentra en la ruta views/layouts/
Este archivo nos provee de la plantilla principal de la aplicación las modificaciones que realicemos en este archivo se aplicaran a todas las páginas de la aplicación. Básicamente este archivo incluye el encabezado y el pie de página. Es aquí donde se encuentra el menú.

2.       Aproximadamente en la línea 38 podemos ubicar la sección donde se define el menú lo que haremos aquí es borrar o cambiar algunas de las opciones para poder ir fácilmente a los controladores Empresa y Contacto.
Una vez modificado nos quedara de la siguiente forma
Como se puede observar lo que hicimos fue modificar las entradas que se llamaban About y Contact para hacer referencia a los controladores Empresa y Contacto

Una vez guardados los cambios y recargada la página nos quedara el menú de la siguiente manera


Cambiar formulario para agregar contacto

Para poder cargar la lista de empresas en el formulario de crear o agregar un contacto debemos seguir los siguientes pasos.
1.       Agregaremos una variable que contenga el listado de las empresas. Para esto debemos consultar u obtener esta lista.
Agregamos al principio del archivo ContactoController.php el modelo de Empresa que esta clase nos permitira hacer consultas a la tabla empresa.

use app\models\Empresa;


Dentro de la funcion actionCreate agregamos la siguiente línea de código
$empresas_obj = Empresa::find()->all();

Con esta instrucción recuperamos una lista de todas las empresas que están guardadas en la tabla empresa. El formato en el que las recupera es un arreglo de objetos.


Para más información acerca de los modelos y consultas pueden consultar las siguientes ligas

Ahora convertiremos ese arreglo de objetos empresas_obj en un arreglo simple para poder mostrarlo como una lista de opciones en la lista. Para realizar estos deberemos utilizar una clase llamada ArrayHelper que cuenta con una función llamada map. Nos colocaremos en la parte inicial del archivo y escribiremos lo siguiente:
use yii\helpers\ArrayHelper;







Ahora en la funcion actionCreate agregaremos la llamada a la funcion map de la clase ArrayHelper

$empresas = ArrayHelper::map($empresas_obj,'id','nombre');
Esto creara un arreglo simple utilizando los valores de los campos id y nombre que posteriormente se utilizaran para ser los valores de la lista de opciones en el formulario.

Una vez teniendo el arreglo  empresas lo enviaremos como variable a la vista create quedando la funcion actionCreate de la siguiente manera
public function actionCreate()
{
$model = new Contacto();


if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['view', 'id' => $model->id]);
}


$empresas_obj = Empresa::find()->all();
$empresas = ArrayHelper::map($empresas_obj,'id','nombre');


return $this->render('create', [
'model' => $model,
'empresas' => $empresas,
]);
}



Tambien debemos agregar o enviar la variable empresas en la vista create ya que esta llama a otra vista denominada _form que es la encargada de mostrar el formulario.
El archivo create.php quedara de la siguiente manera


Ahora modificaremos el archivo _form para convertir el campo id_empresa de tipo text a lista de opciones.


Con esto al crear un nuevo contacto podremos seleccionar alguna de las empresas que previamente hayamos creado para asignarla al contacto.







Repetiremos los pasos para modificar la funcion actionUpdate quedando de la siguiente manera


También en el archivo update.php

Yii funcionando.