CakePHP: Как использовать одну и ту же функцию контроллера для рендеринга 2 страниц - PullRequest
1 голос
/ 05 января 2012

Я хочу иметь страницу с именем «index» с соответствующим URL «домен / контроллер / индекс» и другую страницу с именем «admin_index» с соответствующим URL «домен / admin / controller / index».Хитрость заключается в том, что я хочу, чтобы обе страницы использовали один и тот же вид для рендеринга и одну и ту же функцию для логики, в то время как один из параметров страницы является флагом, указывающим на вид, из которого отображается URL-адрес.

Iнужно, потому что в настоящее время на моей «индексной» странице есть таблица с данными.Страница также имеет интеллектуальный фильтр для этой страницы, который требует уважительного количества логики на стороне контроллера.Моя проблема в том, что в настоящее время в каждой строке есть кнопка «Редактировать», которой я не хочу делиться со всеми пользователями.

В настоящее время я использую префикс администратора для обработки такого рода страниц, защищаяих путем ограничения доступа с веб-сервера (в моем случае Apache).

Есть идеи, как реализовать это, не дублируя функцию контроллера?

1 Ответ

1 голос
/ 05 января 2012

Попробуйте (я тестировал это в своем приложении CakePHP 2.0.x, но в этом коде нет ничего, что должно относиться к 2.0):

//controller
public function index($admin = false) {
    $this->set(compact('admin'));
}
public function admin_index() {
    $this->index(true); //calls the index function to do all that stuff
    $this->render('index'); //tells it to render the 'index' view
}

Когда вы переходите на страницу /indexвсе должно быть как обычно.Когда вы нажимаете admin_index, он запускает логику из функции index, а затем указывает на использование index представления.

...