Gerando um formulário ZEND com dados dinâmicos?
-
26-09-2019 - |
Pergunta
Preciso acessar minha sessão e com base na propriedade de sessão, preciso pegar coisas do banco de dados para usar como opções no meu suspensão.
$ _Session é:
[sess_name] => Array(
[properties] => Array(
1=> Hotel A,
2=> Hotel B
),
[selected] => 1
)
Preciso pegar o Hotel A do selecionado e depois acessar todas as contas do hotel A no banco de dados:
id title hotel_id
------------------------------
1 Hotel A Twitter Account 1
2 Hotel B Facebook Account 2
3 Hotel A Facebook Account 1
Preciso de IDs 1 e 3 porque meu hotel_id é 1 no contexto de:
$this->addElement( 'select', 'account', array(
'multioptions' => $NEED_IT_HERE
));
Aqui está minha consulta / codificação de pegador de sessão:
$cs = new Zend_Session_Namespace( SESS_NAME );
$model = new Model_DbTable_Social;
$s = "
SELECT social_accounts.*
FROM social_accounts
LEFT JOIN social_media_outlets ON social_media_outlets.id = social_accounts.property
WHERE social_accounts.property=".(int)$cs->selectedclient;
Eu tenho esse código na minha página de formulário, mas preciso movê -lo para o meu modelo agora.
Solução
Então, onde está o seu problema?
Faça uma consulta adequada no seu banco de dados para obter essas contas.
Faça uma matriz adequada com o resultado. (id => título)
Você pode definir opções no elemento já existente:
$element = $form->getElement('account');
$element->setMultiOption( $option_array );
Você pode criar um método na sua classe de formulário que aceitaria o DB OBJ, o OBJ da sessão e executaria as ações necessárias para carregar e definir essas opções.
Modelo, que está em aplicativos/módulos/foo/modelos/dbtable/social, o nome da classe modelo é modelo_dbtable_social e o módulo é foo. Joga erro fatal:
Sua aula de tabela DB provavelmente deve ser nomeada:
Foo_Model_DbTable_Social
E Application.ini deve conter:
resources.modules[] =
; (It is autoloader for modules)
Class 'Model_dbtable_social' quando tento invocá -lo no meu formulário. Ou é que você menciona mais fácil?
É uma boa prática pedir esses recursos em __construct como Chelmertz. Aqui está uma boa conversa sobre o assunto relacionado:http://www.youtube.com/watch?v=-frm3vphsei
Você pode querer ler minha pergunta sobre "onde conectar formulários aos modelos":Doutrina do Zend-Framework e padrão MVC: que tipo de camada deve conectar dados entre modelos e formulários?Não há muitas soluções embora