Сен 12 2008
5 часто задаваемых вопросов по CakePHP (часть первая)
Решил собрать коллекцию самых часто задаваемых вопросов, из тех что возникают у начинающих программистов на 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, но лично я — против использования стандартных админок. Если только в качестве прототипа перед серьезной переработкой.
Октябрь 13th, 2008 at 17:36
а как получить доступ к базе данных из хелпера?
Октябрь 15th, 2008 at 22:36
Из хелпера не должно быть доступа к базе. Передавайте в шаблон все необходимые данные и затем используйте их в хелпере. Обдумайте еще раз структуру своего приложения. Почему вам понадобился доступ к базе из хелпера? Можно ли это реализовать в контроллере или компоненте?
Октябрь 16th, 2008 at 13:02
я хотел сделать хелпер для учета статистики посещения. Внутри хелпера 2 основных функции: Count() - подсчет статистики и Show() - просмотр статистики. Результаты хранить в базе данных. И вот чтоб функция Count() записывала в базу новые данные о статистике, а Show() доставала из базы данные.
Октябрь 16th, 2008 at 17:10
Сделайте компонент. Для подсчета статистики вызывайте функцию из app_controller.php, для отображения - можно возвращать массив данных в шаблон и использовать его, например, в элементе.