Retirado daqui:
http://groups.google.com/group/symfony-users/browse_thread/thread/c4a90c5a140a90ed
O problema é:
- quero especificar o ACCOUNT_ID no objecto a ser editado/criado, mas sem que esse valor alguma vez passe para o utilizador sob a forma de hidden field.
- quero ainda manter o validador do formulário para garantir que esse account_id existe. Além disso quero manter o estado original no backend (admin generator)
1ª hipótese ("martelada"):
Fazer set ao validator - sfValidatorPass(), e inserir de account_id o valor no controller ou no $form->updateObject()
2ª hipótese:
Se o account_id é determinado na action, ou seja, não pode ser obtido a partir do objecto em si (nesse caso alteraria dentro do próprio ojecto), então colocar o valor de
account_id numa
option do
form e de seguida adicionar esse valor usando
updateObject() . Como, desta forma, o account_id nunca entra no "mundo" do utilizador não há necessidade de o validar. As validações de base de dados garantem que não ocorre nenhum erro inesperado.
3ª hipótese:
Popular o objecto antes de o passar ao form, ou depois de fazer bind (antes de fazer save()). Neste caso para manter a lógica do account_id completamente fora da class form.
4ª hipótese:
Fazer merge do account_id no array que é passado ao bind. Desta forma tudo se processa como se o account_id tivesse sido submetido. Para manter a validação deve-se manter o validator e apenas fazer unset do widget.