モデルではなくコントローラーの条件でフィールドを無効にしようとしています。
$this->Model->invalidate('check_out_reason', __('Please specify check out reason.', true));
上記は、フィールドを無効にするためには機能しません。代わりに、以下が必要です。
$this->Model->invalidate('Model.check_out_reason', __('Please specify check out reason.', true));
ただし、エラーメッセージを「フィールド」自体($ this-> model-> validationErrors)に表示したい場合は、「Model.check_out_reason」ではなく「check_out_reason」にする必要があります。つまり、コントローラーの入力を無効にしたい場合、フィールド自体にエラーメッセージを表示することはできません。
これがCakePHPのバグであることがわかりますか?