Als voorbeeld gebruik ik de bake tool om een werkend voorbeeld te hebben van de CRUD (Create, Read, Update, Delete) functies.
Eerst maar eens een link per groep om deze te kunnen wijzigen en te verwijderen. Ik heb ervoor gekozen een icoontje voor de groepsnaam te plaatsen en zo de actie te triggeren. Daarvoor kunnen we de table functies gebruiken die deel zijn van de html helper.
Kies daarom leuk kleine plaatjes om als link naar de edit- en addactie te gaan dienen en plaats het in webroot/img.
Open views/groups/index.ctp.
Om een link van een plaatje te maken moeten een combinatie van html->link en html->img gebruiken:
$cells = array();
foreach($groups as $groupSet):
foreach($groupSet as $k => $group):
array_push($cells, array(
// edit link voor deze groep
$html->link(
$html->image('/img/edit.png', array('alt' => 'Edit groepnaam', 'border'=>'0')),
'/groups/edit/'.$group["id"],
array(), false, false
),
// delete link voor deze groep
$html->link(
$html->image('/img/delete.png', array('alt' => 'verwijder groep', 'border'=>'0')),
'/groups/delete/'.$group["id"],
array(), false, false
),
// doorklikken naar de links van deze groep
$html->link($group["naam"],array("controller"=>"Links", "action"=>"index/".$group["id"]."?groepsnaam=".urlencode($group["naam"])))
));
endforeach;
endforeach;
// tabelletje op het scherm zetten
echo "<table>";
echo $html->tableCells($cells);
echo "</table>";
Het gebruik van deze helpers zorgt ervoor dat altijd geldige html wordt gegenereerd. De tabel zorgt dat de icoontjes netjes naast de groepnamen komen te staan.
De helper $html->tableCells() maakt van een array een serie TR's en TD's:
$html->tableCells(array(array(1,2,3), array(4,5,6), array(7,8,9)));
genereert de volgende code:
<tr><td>1</td> <td>2</td> <td>3</td></tr>
<tr><td>4</td> <td>5</td> <td>6</td></tr>
<tr><td>7</td> <td>8</td> <td>9</td></tr>
Daar hoeft dus alleen nog een table omheen. De actie voor een nieuwe groep zullen we ook gelijk aanpassen, dat wordt verderop gebruikt:
link("Nieuwe groep", array("controller"=>"Groups", "action"=>"add"));?>
Vraag het scherm op via de webinterface om te zien hoe de groepen er nu uitzien.

Nu de view in orde is, hebben we de controller nodig.
Hernoem de huidige group_controller.php in controllers om te voorkomen dat ie overschreven wordt.
Open een DOS box en ga naar je programma directory. Daar type je
cake bakeom de utility te openen.
Kies Controller -> Group,
- interactive: n
- include basic class methods: y
- admin routing: n
- Look Okay?: y
- unit test files: n
In de controllers dir is nu een nieuwe groups_controller.php gemaakt met daarin een method voor add() edit() en delete() (en nog wel wat meer, maar dat hebben we niet nodig). Hernoem groups_controller.php naar groups_controller_baked.php, en herstel de vorige groups_controller.php in de originele staat.
Nu eerst een klein uitstapje. In de controller wordt gecontroleerd of de gebruiker ingelogd is. Na dat geconstateerd te hebben kunnen we eigenlijk gelijk de layout wijzigen naar "ingelogd". Open het oorspronkelijke groups_controller bestand. Kopieer
$this->layout = "loggedin";uit de index() functie naar de __validateLoginStatus() functie, en wel als we zeker weten dat er is ingelogd:
function __validateLoginStatus(){
if($this->action != 'login' && $this->action != 'logout'){
if(!$this->Session->check('User')){
$this->Session->setFlash('Om deze pagina te bekijken moet je eerst inloggen');
$this->redirect('/users/login');
}
$this->layout = "loggedin";
}
}
In andere methods is dit nu dus niet meer nodig.
Nu de edit() en delete() functies en nu we toch bezig zijn gaan we de add() functie refactoren, naar voorbeeld van de bake actie.
Er is maar een kleine aanpassing nodig:
$user = $this->Session->read('User');
$this->set("user_id", $user['id']);
Dit komt in plaats van de koppeling van de user die bake heeft gemaakt. Verder kun je de methods add() edit() en delete() kopiëren. De functie nieuwe_groep() is niet meer nodig en mag opgeruimd worden. Rest ons nog om twee views toe te voegen, 1 voor edit en een voor add. Deze views zijn precies hetzelfde als de bestaande view nieuwe_groep.ctp. Hernoem dat bestand naar edit.ctp en maak er een kopie van die je add.ctp noemt. De code zelf hoeft niet aangepast te worden. Let op de forms die op je scherm komen, ze posten automatisch naar de juiste controller-action.
He group-gedeelte is nu af. (dwz, alles werkt). Het was sneller geweest direct de bake utility te gebruiken, maar nu heb ik veel meer geleerd. Het onderhouden van de links in groepen zal nu niet veel problemen meer opleveren. Ik heb nog even de favicon veranderd (in /webroot) hier is de code tot nu toe.