Je suis très nouveau à cakePHP.Comment faire une action pour des actions manquantes?
Je travaille sur un contrôleur comme ceci:
class DesignersController extends AppController
{
var $name = 'Designers';
function index()
{
$data = $this->Designer->find('all');
$this->set('designers', $data);
}
function belle_etoile()
{
$this->show_designer("belle etoile");
}
function ritani()
{
$this->show_designer("ritani");
}
function swarovski()
{
$this->show_designer("swarovski");
}
function verragio()
{
$this->show_designer("verragio");
}
private function show_designer($designer)
{
$this->layout = 'first';
$data = $this->Designer->find('first', array('conditions' => array('Designer.name' => $designer)));
$this->set('data', $data);
$this->render('show_designer');
}
}
Comme vous pouvez le voir bon nombre des « actions » sont des raccourcis pour l'action show_designer/param
où param
est le nom de l'action de raccourci.
Chacune de ces actions est un "concepteur" dans la base de données. Je ne veux pas avoir à faire l'url designers/show_designer/ritani
, je préfère être designers/ritani
.
Cela fonctionne, mais le problème est:
Je dois créer un tas de fonctions redondantes pour chaque concepteur, et si un nouveau concepteur est ajouté, il ne fonctionnera pas jusqu'à ce que j'ajouter une fonction pour il.
Je préférerais avoir une fonction/action qui fonctionne si l'action demandée est manquante, et a l'action qui a été demandé en tant que paramètre
donc si je demande url designers/stardust
, puisque stardust n'est pas défini comme une action qu'il appellerait l'action catch_all
avec stardust comme paramètre.
Ainsi, au lieu d'un tas de fonctions redondantes je pouvais avoir ceci:
function catch_all($action)
{
$this->show_designer($action)
}
Y at-il de toute façon de faire quelque chose comme ça?
Ne pas oublier de vérifier "existe" d'abord ... – mark
comme tu dis @mark – Ish