Jump to main content Jump to doc navigation

xPDOObject::isDirty()

Показывает, изменено ли поле объекта (или объект ещё ни разу не сохраняли). Имя поля обязательно. Перегрузки «грязный ли весь объект» нет.

Синтаксис

API Docs: https://api.modx.com/revolution/2.2/db_core_xpdo_om_xpdoobject.class.html#\xPDOObject::isDirty()

boolean isDirty (string $key)
  • $key — имя поля (обязательный аргумент).

Возвращает true, если поле существует и либо есть в карте dirty-полей, либо объект новый (isNew()). Возвращает false, если поле существует и не менялось у уже сохранённого объекта. Неизвестное имя поля даёт false и ошибку в журнале xPDO.

Пример

Проверка одного поля у объекта Skrewt:

$skrewt = $xpdo->getObject('Skrewt', 1);

echo $skrewt->isDirty('poisonous') ? 1 : 0; // выведет 0

$skrewt->set('poisonous', false);

echo $skrewt->isDirty('poisonous') ? 1 : 0; // выведет 1

Есть ли хотя бы одно dirty-поле

Вызова isDirty() без $key нет. Чтобы узнать, есть ли у объекта незаписанные изменения полей, смотрите публичную карту $_dirty:

if (!empty($skrewt->_dirty)) {
    echo 'У Skrewt есть dirty-поля.';
} else {
    echo 'У Skrewt нет dirty-полей.';
}

print_r($skrewt->_dirty);

В $_dirty лежат ключи изменённых полей. После save() карта очищается. У нового объекта isDirty($key) вернёт true для любого известного поля ещё до set(), пока isNew() остаётся истинным.

Support the team building MODX with a monthly donation.

The budget raised through OpenCollective is transparent, including payouts, and any contributor can apply to be paid for their work on MODX.

Backers

  • modmore
  • STERC
  • Digital Penguin
  • Jens Wittmann – Gestaltung & Entwicklung
  • CrewMark
  • Fabian Christen
  • Sepia River Studios
  • Dannevang Digital
  • Alex
  • A. Moreno
  • Chris Fickling
  • Stéphane Jäggi
  • Murray Wood
  • Anton Tarasov
  • deJaya
  • JT Skaggs
  • Lefthandmedia
  • eydolan
  • Following Sea
  • Guido Gallenkamp
  • YJ
  • Raffy
  • Snow Creative
  • Nick Clark
  • Guest
  • Helen
  • krisznet
  • Yanni
  • Richard

Budget

$204 per month—let's make that $500!

Learn more