проект cakePHP, orgazization папок, страниц, функций - PullRequest
0 голосов
/ 03 декабря 2010

Я новичок в cakePHP, и мне интересно, как это делает "живой" сайт.

Я вижу 2 возможности:

1) Есть один контроллер с кучей страниц (функций) в его (расширенном) AppController.

2) Существует много контроллеров, каждый с небольшим количеством страниц (функций) в его (расширенном) AppController.

(Вы, вероятно, получите мой вопросуже, но я собираюсь сказать это и по-другому)

Должен ли я поместить свою страницу контактов в отдельный контроллер, чем моя страница блога?(У меня есть догадка, ответ - да.) Почему?

1 Ответ

4 голосов
/ 03 декабря 2010

Вам не нужно создавать контроллер для всего.На самом деле, вы не должны, потому что есть лучшие способы обойти это.Чем больше у вас статических страниц, тем больше он может получить из-под контроля.

Для статических страниц

Скопируйте 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/.

Опять же, это всего лишь пример того, что возможно.В конце концов, вам следует придерживаться методов, которые, по вашему мнению, помогут организовать ваш код как для вас, так и для вашей команды.

...