Вам не нужно создавать контроллер для всего.На самом деле, вы не должны, потому что есть лучшие способы обойти это.Чем больше у вас статических страниц, тем больше он может получить из-под контроля.
Для статических страниц
Скопируйте pages_controller.php из папки cake / libs / controllerв папку вашего приложения / контроллеров.Добавьте следующий фрагмент кода к вашему действию display ():
function display() {
...
$page = Inflector::slug($page);
if (method_exists($this, $page)) {
$this->$page();
}
$this->render(join('/', $path));
return;
}
Затем измените ваш файл rout.php, добавив различные статические страницы:
Router::connect('/about', array('controller' => 'pages', 'action' => 'display', 'about'));
Router::connect('/contact', array('controller' => 'pages', 'action' => 'display', 'contact'));
Теперь контактФорма - это статическая страница, но к ней прикреплена некоторая логика.Таким образом, вы можете перейти к своему PagesController и создать действие специально для этой (или любой другой страницы, которая не является просто статичной):
function contact() {
if (!empty($this->data)) {
...
}
}
По сути, маршрут направляет ваш запрос статической страницы на страницы PagesController.display()
действие.Действие отображения проверяет, существует ли метод с тем же именем.Если это так, он выполняет это действие и отображает представление pages / {page} .ctp.
Для нестатических страниц, например.Блог
Теперь для этого определенно нужна модель.На самом деле, несколько моделей (Post hasMany Comment, Post HABTM Tag).Чтобы манипулировать этими различными моделями и получать к ним доступ, лучше поместить код в отдельный контроллер.
Многие люди любят называть свои контроллеры на основе своих URL-адресов.Например, они называют свой контроллер как BlogController , если им нужен URL-адрес, например /blog
.
. Я предпочитаю использовать метод маршрутизации для получения нужных мне URL-адресов и сохранятьконтроллеры, названные в соответствии с соглашениями CakePHP.
Например.PostsController будет контролировать модель Post и связанные с ней модели.Но если бы я хотел, чтобы URL-адрес /blog
отображал список всех сообщений, я бы написал маршрут, который бы указывал на /posts/index
.
Router::connect('/blog', array('controller' => 'posts', 'action' => 'index'));
У вас также могут быть дополнительные маршруты.Пример: /blog/2010/06/10/whats-in-a-post
чтобы указать на /posts/view/
.
Опять же, это всего лишь пример того, что возможно.В конце концов, вам следует придерживаться методов, которые, по вашему мнению, помогут организовать ваш код как для вас, так и для вашей команды.