Record / CakePHP
CakePHP 4 でヘルパーでselectを作ると最初に空のoptionができてしまう
$this->Form->control() を使った際に、<select> の最初に空の <option> が生成される理由は、CakePHP の Form ヘルパー がデフォルトで「プレースホルダーの選択肢」を追加する仕様になっているためです。 これをオフにすれば出なくなります。
デフォルト動作の詳細
CakePHP の FormHelper は、'type' => 'select' を指定した場合、最初に空の <option> を自動的に挿入します。
これは、ユーザーが何も選択していない状態を明確にするための配慮です。
空の <option> を削除する方法
空の <option> を削除するには、empty オプションを明示的に設定するか、無効化します。
empty オプションの使い方
empty => false:
空の <option> が生成されなくなります。
empty => '選択してください':
カスタムのプレースホルダーとして「選択してください」という <option> が追加されます。
その他のポイント
データバインディング
フォームがデータとバインディングされている場合、選択肢が自動的に選択されることがあります。その場合も、最初に空の <option> が表示される可能性があります。
選択肢の値が空でないか確認
$listSectionKey の値に空文字列が含まれている場合も、空の <option> が生成される原因になることがあります。
結びに
<select> に空の <option> ができてしまうのは CakePHP の仕様です。不要であれば empty => false を指定することで解決できます。また、必要に応じてカスタムプレースホルダーを設定することも可能です。