0

CakePHP 1.3を使用して、投稿とコメントテーブルを使用してブログ用のエンジンを開発しました。最近、コメントモデルで適切な検証が定義されているにもかかわらず、データベースのコンテンツ列にnull値のレコードがあることに気付きました。



    <?php
    class Comment extends AppModel {
        var $name = 'Comment';
        var $sequence = 'comments_seq';

        var $belongsTo = array(
            'Post' => array(
                'className'  => 'Post',
                'foreignKey' => 'post_id'
            )
        );

        var $validate = array(
            'content' => array(
                'required' => array (
                        'rule' => 'notEmpty',
                        'message' => 'Content can't be empty.'
                )
            ),
            'post_id' => array(
                'rule' => 'notEmpty'
            ),
            'created' => array(
                'rule' => 'notEmpty'
            )
        );
    ?>

CakePHPフレームワークにバグがありますか、または上記で定義された検証が正しくないか不十分ですか?

4

1 に答える 1

2

検証ルールでは、実際にはフィールドを必要としません。要求するということは、検証するときにキーが存在している必要があることを意味します。notEmptyルールは、キーがでないことだけを要求しますが、それが存在することは要求しません。

フィールドが存在することを要求するには、検証ルールで必須オプションを使用します。

var $validate = array(
  'content' => array(
    'required' => array ( // here, 'required' is the name of the validation rule
      'rule' => 'notEmpty',
      'message' => 'Content can\'t be empty.',
      'required' => true // here, we say that the field 'content' must 
                         // exist when validating
    )
  ),
  'post_id' => array(
     'rule' => 'notEmpty'
   ),
   'created' => array(
     'rule' => 'notEmpty'
   )
);

必要なキーがないと、保存時に「content」キーを含めないだけで、完全に空のレコードを保存できる可能性があります。これが必要になったため、保存しているデータに「コンテンツ」が含まれていない場合、検証は失敗します。

于 2013-01-17T22:04:54.390 に答える