Skip to main content

El controller

Els controladors tenen diversos rols dins d'una aplicació. El més evident és aquell que li correspon rebre la informació de l'usuari i determinar segons el que li ha arribat quina tasca cal dur a terme. Sovint això implica passar informació al model per tal de desar-la o obtenir informació d'un model per finalment passar-ho a una vista per mostrar-ho, tal com es visualitza en l'esquema CodeIgniter 4.3 MVC (Model View Controller)

schema_ci4.png

Podríem resumir que les tasques en general d'un controller són:

  • La càrrega de classes i altres utilitats necessàries per dur a terme una determinada activitat fora del model
  • Gestionar les peticions HTTP
  • Redirigir peticions
  • Autenticacions
  • Gestionar la seguretat
  • Gestionar la codificació
  • etc.

En definitiva, un controlador és aquell que s'encarrega de gestionar qui té permisos d'estar en un lloc, i obtenir les dades que necessita en el format que pugui emprar. Els controladors es troben ubicats a la carpeta app/Controllers, encara que podem utilitzar namespace per agrupar-los en cas necessari.

Crear un controller

Per crear un nou controller utilitzarem l'eina de consola spark que proporciona el Codeigniter. Des de la carpeta principal del projecte, executarem en consola la següent instrucció:

php spark make:controller NOM_CONTROLLER

Evita la utilització de PowerShell en windows donat que aquesta dona problemes amb l'execució d'aquest tipus d'eines de consola, ja sigui codeigniter o altres Frameworks (artisan per Laravel, console per Symfony, etc)

Per tal de fer una gestió més acurada del projecte i tenir els arxius/classes amb noms diferenciats podem fer la crida a make:controller amb el parametre --suffix

# Crea app\Controllers\Pages.php
php spark make:controller pages 

# Crea app\Controllers\PagesController.php
php spark make:controller pages --suffix


image.png







<?php

namespace App\Controllers;

use App\Controllers\BaseController;

class PagesController extends BaseController
{
    public function index()
    {
        // Codi generat automàticament
    }
}



Dins d’un controller haurem de fer la crida a la vista que es vulgui retornar a l’usuari, per fer-ho emprant echo o return, tal com es mostra a continuació:

// L'arxiu de vista estarà ubicada dins la carpeta app/Views i en 
// subcarpetes en cas necessari i serà aquesta subruta la que haurem
// d'indicar a la funció view

return view ('ruta/arxiu/vista');

// or

echo view ('ruta/arxiu/vista');

Si utilitzem la instrucció echo podrem enviar a l'usuari final una seqüència de vistes que conformaran la pantalla final que veurà l'usuari, tal com fem en PHP tradicional i les composicions amb include. Aquest fet es veu més detalladament en l'apartat de layouts.

El nom de l'arxiu es pot especificar sense posar l'extensió (PHP), ja que CodeIgniter pren per defecte l'extensió PHP, encara que en cas necessari es pot passar la ruta indicant també l'extensió de l’arxiu.

En la majoria d’ocasions necessitarem passar algun paràmetre/variable des del controlador a la vista, en aquests casos ho farem emprant el segon paràmetre de la funció view.

// La variable dades és un array associatiu que contindrà:
// nom_variable com index que s'utilitzarà a la vista, amb un valor 
// Per exemple:

$dades['nomVar']= 'valor';
return view ('ruta/arxiu/vista', $dades);

// or

$dades['nomVar']= 'valor';
echo view ('ruta/arxiu/vista', $dades);

// or
return view ('ruta/arxiu/vista', ['nomVar'=>'valor']);

// or
echo view ('ruta/arxiu/vista', ['nomVar'=>'valor']);

Dins la vista farem servir aquesta variable amb el nom definit en el controller

<!-- Exemple porcio de la vista -->
<p>
  <?php echo $nomVar ?>
</p>

La primera funció d'un controller


Crearem dins PagesController una funció anomenada view que rebrà paràmetres per la URL.



// Funció que rep un parametre $page que és opcional
// en cas de no rebre el paràmetre se li assigna 
// un valor per defecte 'home'

public function view($page = 'home')
{
    $data['title'] = "La meva primera pagina";

   // si $page='home' carrega l'arxiu app/Views/home.php
    return view($page, $data); 
}