Post
次の検証ルールを持つモデルがあります。
public $validate = array(
'title' => array(
'between' => array(
'rule' => array('between', 1, 60),
'message' => 'Between 1 and 60 characters in length'
),
'format' => array(
'rule' => array('custom', '~[a-zA-Z0-9\s-]~'),
'message' => 'Alphanumeric characters, spaces and dashes (-) only'
)
),
'body' => array(
'between' => array(
'rule' => array('between', 1, 65535),
'message' => 'Between 1 and 65535 characters in length'
)
),
'slug' => array(
'between' => array(
'rule' => array('between', 1, 60),
'message' => 'Between 1 and 60 characters in length'
),
'format' => array(
'rule' => array('custom', '~[a-zA-Z0-9-]~'),
'message' => 'Alphanumeric characters and dashes (-) only'
)
)
);
次のような新しい投稿を挿入するビューもあります。
<?php $this->Html->script('add-post', array('inline' => false)); ?>
<h1>Add post</h1>
<?php echo $this->Form->create('Post'); ?>
<?php echo $this->Form->input('title'); ?>
<?php echo $this->Form->input('body'); ?>
<?php echo $this->Form->input('slug'); ?>
<?php echo $this->Form->end('Publish'); ?>
さて、タイトルのようなフォームを送信するとblog post title £$&£$^£$
、正規表現がそのタイトルの記号と一致しないにもかかわらず、フォームが通過して挿入されます。これは、正規表現を使用して形式をチェックするすべてのフィールドで発生します。
ただし、ルールに合格しない投稿between
(60 文字を超えるタイトルなど) を送信しようとすると、検証エラーが発生します。
ここで何がうまくいかないのでしょうか?