値の選択としてselectフォームを構築していた時の話。

既に登録しているデータを更新するView制作していて、エリアの選択を下記のように作成するとします。

<select class="select" aria-label="Select" name="area">
<?php foreach ($area_ary as $value): ?>
  <option value="<?php echo $value; ?>"><?php echo $value; ?></option>
<?php endforeach; ?>
</select>

すると、まさかのエラーが表示しました。

Unexpected field area in POST data

セキュリティーで弾かれてしまいました。なぜ?

既にあるデータは登録できたのに、textからselectに変えたからこうなるの?とハマってしまいました。textもselectも値は一つ飛ぶ形だから問題ないと思うんだけどな―。

でも気になったのは、textで登録したときはヘルパーを使用して表示させたフォーム。しかし今回は手作業で構築したSource。じゃあ、このselectフォームもヘルパー使ったらどうなるの?と試してみました。

<?php
 echo $this->Form->select('area', $area_ary);
?>

すると、エラーなく登録完了!ええ!?

取り合えず動作はしたのでOKとするけど、ヘルパーを使用しないフォームからの値はバリデーションなどのセキュリティ的な設定をしている場合では引っ掛かってしまうのかな?という個人的な解釈で終わりたいと思います。