Páginas

8 de fevereiro de 2010

Inserir valores extra nos formulários antes da validação

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.

Nenhum comentário:

Postar um comentário