Jump to main content Jump to doc navigation

Что делает правило?

Это правило проверяет валидность внешнего ключа для определённого отношения.

Использование правила

Здесь нужно убедиться, что объекту не назначен ID категории, для которой категории не существует.

Сначала модель:

<model package="test" baseClass="xPDOObject" platform="mysql"
       defaultEngine="MyISAM" tablePrefix="test_">
    <object class="myTest" table="test" extends="xPDOSimpleObject">
        <field key="category" dbtype="int" precision="10" attributes="unsigned"
               phptype="integer" default="0" null="false" index="index" />

        <validation>
            <rule field="name"
                  name="preventBlank"
                  type="xPDOValidationRule"
                  rule="xPDOForeignKeyConstraint"
                  foreign="id"
                  local="category"
                  alias="Category"
                  class="modCategory"
                  message="The category specified does not exist."
             />
        </validation>

        <aggregate alias="Category" class="modCategory"
                   local="category" foreign="id"
                   cardinality="one" owner="foreign" />
    </object>
</model>

Сгенерируйте модель из XML-схемы. Затем в сниппете вызовите Test:

$output = '';
$modx->addPackage('test','/path/to/my/test/model/','test_');
$obj = $modx->newObject('myTest');
$obj->set('category',123);
$validator = $obj->getValidator();
if ($validator->validate() == false) {
    $messages = $validator->getMessages();
    foreach ($messages as $errorMsg) {
        $output .= $errorMsg['message'];
    }
}

Если категории с ID 123 нет, будет выведено:

The category specified does not exist.

Аналогично в схеме можно было бы указать поле name как атрибут foreign, если бы поле category объекта myTest задавали этим именем.

Смотрите также

  1. xPDOForeignKeyConstraint
  2. xPDOMaxLengthValidationRule
  3. xPDOMaxValueValidationRule
  4. xPDOMinLengthValidationRule
  5. xPDOMinValueValidationRule
  6. xPDOObjectExistsValidationRule

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