Сен 12 2008

5 часто задаваемых вопросов по CakePHP (часть первая)

Раздел: Веб-разработкаМета @ 22:37

Решил собрать коллекцию самых часто задаваемых вопросов, из тех что возникают у начинающих программистов на CakePHP. Буду публиковать по частям.

1. А где здесь вообще сайт?

Макеты внешнего вида в папке /app/views/layouts/. Шаблоны отдельных страниц в остальных под-папках /app/views/. Логика обработки контента перед выводом в шаблон — в контроллерах (/app/controllers/). Связи таблиц в базе данных — в моделях (/app/models/).

2. Как добавить еще одну простую страничку?

Создать в контроллере pages_controller.php функцию, с названием соответствующим новой страничке. Затем создать шаблон представления в папке /app/views/pages/ с именем, также соответствующим названию новой страницы. Вместо pages_controller’а может выступать любой другой контроллер. Тогда шаблон представления надо сохранить в папку, совпадающую с именем этого контроллера.

3. Новая страничка не отображается!

Что-то сделали неправильно. Очистите кеш (удалите все файлы из папок /app/tmp/cache/models/ и /app/tmp/cache/persistent/), затем включите отладку — в файле /app/config/core.php, в строке 43:

Configure::write(’debug’, 0);

Ноль надо заменить на двойку. Посмотрите какие ошибки выдаются и исправьте их.

4. Не сохраняются данные в базу!

Две самые распространенные причины проблем с сохранением — это валидация и отсутствие в таблице значений по-умолчанию. Если вы настраивали в модели валидацию, удостоверьтесь что сохраняемые данные ее проходят. Очень часто при написании модели для комментариев программист добавляет валидацию для поля e-mail. А в админке про это забывает. В результате, комментарий (или новость, статья и т.п.), созданный в админке, не сохраняется. Проблема же со значениями по-умолчанию как правило легко обнаруживается при включенной отладке, в логе sql-запросов. Например, в тойже таблице комментариев есть поле с текстом комментария и поле с текстом ответа на него от владельца сайта. Если не установить значение по-умолчанию (пускай даже и NULL) для поля ответа, то при попытке сохранения только текста комментария, будет происходить ошибка.

5. Как сделать админку?

Этому будет посвящен отдельный пост, и даже не один. Вкратце: надо раскомментировать в файле /app/config/core.php строку 69 (Configure::write(’Routing.admin’, ‘admin’);), затем в каждом контроллере который надо админить, создать функции admin_index(), admin_add(), admin_edit(), admin_delete() (естественно, можно и больше, главное чтобы начинались с admin_) и соответствующие им представления (views). Можно сгенерировать админку автоматически, с помощью скрипта bake или используя scaffolding, но лично я — против использования стандартных админок. Если только в качестве прототипа перед серьезной переработкой.

Теги:

4 Responses to “5 часто задаваемых вопросов по CakePHP (часть первая)”

  1. Мамончик Александр says:

    а как получить доступ к базе данных из хелпера?

  2. Мета says:

    Из хелпера не должно быть доступа к базе. Передавайте в шаблон все необходимые данные и затем используйте их в хелпере. Обдумайте еще раз структуру своего приложения. Почему вам понадобился доступ к базе из хелпера? Можно ли это реализовать в контроллере или компоненте?

  3. Мамончик Александр says:

    я хотел сделать хелпер для учета статистики посещения. Внутри хелпера 2 основных функции: Count() - подсчет статистики и Show() - просмотр статистики. Результаты хранить в базе данных. И вот чтоб функция Count() записывала в базу новые данные о статистике, а Show() доставала из базы данные.

  4. Мета says:

    Сделайте компонент. Для подсчета статистики вызывайте функцию из app_controller.php, для отображения - можно возвращать массив данных в шаблон и использовать его, например, в элементе.

Напиши комментарий!