どんなのがダメかというと下記の様に末尾が数字だけの配列になるようなhiddenがダメ。
echo $this->Form->hidden('foo.0', ['value' => 'foo zero']);
echo $this->Form->hidden('foo.1', ['value' => 'foo one']);
このフォームをPOSTすると下記の様なエラーでSecurityComponentでひっかかります。
Tampered field 'foo' in POST data (expected value 'foo one' but found ‘’)
原因はFormHelperの下記の箇所
// ここで末尾の数値なしのフィールド名を取得 foo.0, foo.1 がどちらも foo と判定されちゃう。
$field = preg_replace('/(\.\d+)+$/', '', $field);
if ($lock) {
if (!in_array($field, $this->fields)) {
if ($value !== null) {
// ここでfooの期待値をvalueとして変更不可対象にしてしまう…
return $this->fields[$field] = $value;
というわけでSecurityComponentを使うならfoo.0
みたいに末尾が ".数値" になるフィールド名は避けるのが無難そうです。