С помощью этого компонента вы можете использовать в своих проектах «мягкое удаление» - т.е. установку флага для пометки удаленных записей, вместо реального их удаления. Зачем это нужно? Например, для хранения предыдущих версий отредактированных записей на блоге, для сохранения архива старых товаров в магазине — применений масса. Я стараюсь во всех своих проектах использовать «мягкое удаление» даже просто для того чтобы исключить ошибку случайного удаления. Заказчики часто обращаются: «ой, а мы удалили, а потом передумали, а можно восстановить?».
Внимание! Я еще не тестировал этот компонент с CakePHP 1.2 RC3. Судя по отзывам в комментариях к компоненту, есть проблемы с совместимостью. Эта запись — перевод документации, в следующей я опишу возможные проблемы и пути их решения.
Читать дальше “Мягкое удаление с помощью Soft Delete Behavior”
Теги: cakephp, компонент, модель, пример
Просмотрите код ваших контроллеров. Если часто встречаются конструкции типа
$this->Product->recursive = -1;
$hits = $this->Product->find('all',array('conditions'=>'Product.image <> "no_image"','order'=>'Product.hit DESC, Product.added DESC','limit'=>9));
то задумайтесь — а место ли им в контроллере?
В чем идея модели? Предоставлять интерфейс к данным. Т.е. Модель должна вернуть уже готовые к отображению данные, в контроллере — только связь с внешним видом. Весь выше приведенный код стоило бы заменить методом в модели, например getHits($num). Тогда вызов в контроллере упростился бы до:
$hits = $this->Product->getHits(9);
Логично?
Этот принцип называется «толстые модели, худые контроллеры», он рекомендует переносить максимально возможную часть логики (естественно, логики поиска данных) приложения в модель.
Теги: cakephp, модель, совет
Попробую для новичков более подробно описать особенности взаимодействия частей приложения на CakePHP.
Первая основополагающая идея заложена в понятии «Модель». Что такое модель? Это объектно-ориентированное представление данных внутри приложения, с интуитивно-понятным интерфейсом. Под интерфейсом тут надо понимать не внешний вид, а именно способ взаимодействия с другими объектами приложения.
Чтобы было проще понять, приведу пример.
Читать дальше “И снова про основы”
Теги: cakephp, модель, планирование
В большинстве приложений необходимо не только отображать данные, но и взаимодействовать с пользователями. И даже не просто взаимодействовать, а по разному работать с разными группами. Даже в этом блоге — есть администраторы, есть зарегистрированные пользователи, а есть просто читатели. Чем админ отличается от обычного пользователя? Тем что у него есть доступ к определенным функциям. Как определить что пользователь — админ? Авторизовать его, узнать логин и пароль.
Эти задачи — авторизацию и определение прав доступа к различным функциям — приходится решать при разработке каждого сайта. В CakePHP есть встроенный компонент Acl для работы с правами, но он слишком навороченный для простых сайтов. Часто, если надо просто ограничить доступ к админке, мы в своей студии используем простой ValidationComponent, единственное что модифицированный под использование Http-Digest авторизации.
Читать дальше “SimpleAcl — простой компонент для авторизации и проверки прав пользователей”
Теги: cakephp, авторизация, модель, пример, форма, шаблон
Во многих приложениях используются связи типа многие-ко-многим - HasAndBelongsToMany или HABTM в терминологии CakePHP. Они нужны для создания меток к записям в блоге, привязки атрибутов к товарам в интернет магазине, пользователей к пользователям в социальных сетях и т.д.
Для создания связи HABTM в CakePHP используется вспомогательная таблица, в которой хранятся два идентификатора связываемых данных. Например, если нам надо связать таблицы posts и tags, то вспомогательная таблица будет иметь вид:
Читать дальше “Добавление и удаление ассоциаций между записями”
Теги: cakephp, habtm, ассоциация, модель, пример, связь