Preencher TDBMultiSearch no evente onEdit Olá pessoal, gostaria de saber qual seria o modo mais adequado de preencher um TDBMultiSearch, que uso para selecionar a cidade. Hoje estou fazendo assim: ...
A
Preencher TDBMultiSearch no evente onEdit  
Olá pessoal, gostaria de saber qual seria o modo mais adequado de preencher um TDBMultiSearch, que uso para selecionar a cidade.

Hoje estou fazendo assim:

 
  1. <?php
  2. public function onEdit($param)
  3. {
  4. try
  5. {
  6. if (isset($param['key']))
  7. {
  8. TTransaction::open($this->database);
  9. $class = $this->activeRecord;
  10. $object = new $class($param['key']);
  11. // treats City
  12. $city = new City($object->city_id);
  13. $object->city_id = [ $city->id => $city->name.' / '.$city->state->abbreviation ];
  14. $this->form->setData($object);
  15. TTransaction::close();
  16. }
  17. else
  18. {
  19. $this->form->clear();
  20. }
  21. }
  22. catch (Exception $e)
  23. {
  24. new TMessage('error', $e->getMessage());
  25. TTransaction::rollback();
  26. }
  27. }
  28. ?>


Porém, na parte
 
  1. <?php $object->city_id = [ $city->id => $city->name.' / '.$city->state->abbreviation ]; ?>
, o membro STATE tem visibilidade privada e o acesso dessa forma não é adequado, apesar de funcionar.

Minha dúvida é se há uma forma melhor (correta) de implementar isso.

Grato pela atenção dispensada.

Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (2)


NR

Acho que está correto desta maneira. Há um exemplo no tutor que faz praticamente a mesma coisa.

Quanto ao atributo privado não se preocupe, pois ao acessar $city->state você não está acessando diretamente a varíável state. O framework identifica que existe uma função get_state e chama a função ao invés de acessar a variável diretamente.
A

Muito obrigado Nataniel.

Tenha um ótimo dia.