3

特別な検証イベントを介してデータの整合性を検証しようとしています。私の Phalcon\Mvc\Collection モデルは、いくつかの Phalcon\Mvc\Model\Validator バリデーターを使用して validation() メソッドを実装しています。私のコントローラーでは、そのモデルを save() します。保存操作が失敗した場合は、モデルの getMessages() メソッドを介してエラー メッセージを出力しようとします。つまり、ドキュメントhttp://docs.phalconphp.com/en/latest/reference/odm.htmlで提供されている例に従います。

しかし、getMessages() メソッドが存在しないというエラーが表示されます。私の Phalcon のバージョンは 0.7.0 です。API http://docs.phalconphp.com/en/latest/api/Phalcon_Mvc_Collection.htmlを確認しましたが、getMessages() メソッドが表示されません。また、Phalcon\Mvc\Collection クラスでリフレクション テストを実行したところ、その観察結果が確認されました。

ドキュメントには、Phalcon\Mvc\Collection\Validator を使用して独自のバリデータを実装できることも記載されています。ただし、このクラスは存在しないようです。

だから、私の質問は次のとおりです。

  1. 検証の結果であるエラー メッセージを表示するにはどうすればよいですか?
  2. カスタムバリデーターを作成するにはどうすればよいですか?
  3. Phalcon\Mvc\Model\Validator\Uniqueness バリデータは NOSQL と互換性がありますか?

お時間をいただきありがとうございます。

4

3 に答える 3

8

おっしゃる通り、実装に getMessages() メソッドがありませんでした。今のところ、C クラスに正式に追加されている間、モデルに追加できます。

<?php

class Users extends Phalcon\Mvc\Collection
{
   public function getMessages()
   {
       return $this->_errorMessages;
   }
}

1- 検証の結果であるエラー メッセージを表示するにはどうすればよいですか? 上記をチェック

2- カスタムバリデータを作成するにはどうすればよいですか?

バリデーターは、「Phalcon\Mvc\Model\Validator」から継承し、「Phalcon\Mvc\Model\ValidatorInterface」を実装するクラスです。

<?php

use Phalcon\Mvc\Model\Validator,
Phalcon\Mvc\Model\ValidatorInterface;

class HashValidator extends Validator implements ValidatorInterface
{

    public function validate($record)
    {
        $fieldName = $this->getOption('field');
        if (!preg_match('/[a-z]+/', $fieldName) {           
            $this->appendMessage("The hash is not valid", $fieldName, "Hash");
            return false;
        }
        return true;
    }

}

バリデーターを再利用したくない場合は、モデルに検証ルールを追加するだけです。

<?php

use Phalcon\Mvc\Model\Message;

class Users extends Phalcon\Mvc\Collection
{

    public function validation()
    {
        if (!preg_match('/[a-z]+/', $this->password) {          
            $this->_errorMessages[] = new Message("The hash is not valid", "password", "Hash");
            return false;
        }
        return true;
    }

    public function getMessages()
    {
        return $this->_errorMessages;
    }

}

3- Phalcon\Mvc\Model\Validator\Uniqueness バリデータは NOSQL と互換性がありますか? このバリデーターは SQL モデルとのみ互換性がありますが、次の方法で NoSQL コレクションを操作するバリデーターを作成できます。

<?php

use Phalcon\Mvc\Model\Validator,
Phalcon\Mvc\Model\ValidatorInterface;

class UniqueValidator extends Validator implements ValidatorInterface
{

    public function validate($record)
    {
        $field = $this->getOption('field');
        if ($record->count(array("field" => $record->readAttribute($field)))) {
            $this->appendMessage("The ".$field." must be unique", $fieldName, "Unique");
            return false;
        }
        return true;
    }

}
于 2012-12-14T10:17:00.383 に答える