Я очень новичок в cakePHP.
Я работаю над контроллером примерно так:
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');
}
}
Как видите, многие "действия" являются ярлыками для show_designer/param
action, где param
- это имя ярлыка.
Каждое из этих действий является «дизайнером» в базе данных.Я просто не хочу указывать URL designers/show_designer/ritani
, я бы предпочел, чтобы он был designers/ritani
.
Это работает, но проблема в следующем:
Мне нужно создать кучу избыточных функций для каждого дизайнера, и если будет добавлен новый дизайнер, он не будет работать, пока я не добавлю для него функцию.
Я бы предпочел иметь функцию / действиеон запускается, если запрошенное действие отсутствует, и имеет действие, запрошенное как параметр
, поэтому, если я запрашиваю url designers/stardust
, так как stardust не определяется как действие, оно будетвызовите действие catch_all
с stardust в качестве параметра.
Таким образом, вместо набора избыточных функций я мог бы просто иметь следующее:
function catch_all($action)
{
$this->show_designer($action)
}
Есть ли в любом случаесделать что-то вроде этого?