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.