2010-06-09 22 views
1

J'ai besoin d'accéder à ma session et en fonction de la propriété de session, j'ai besoin de saisir des choses de la base de données pour les utiliser comme options dans ma liste déroulante.Générer un formulaire zend avec des données dynamiques?

$ _SESSION est:

[sess_name] => Array(
    [properties] => Array(
     1=> Hotel A, 
     2=> Hotel B 
    ), 
    [selected] => 1 
) 

J'ai besoin de saisir Hôtel A partir sélectionné, puis accéder à tous les comptes en Hôtel A partir de la base de données:

id title      hotel_id 
------------------------------ 
1 Hotel A Twitter Account  1 
2 Hotel B Facebook Account 2 
3 Hotel A Facebook Account 1 

J'ai besoin ids 1 et 3 parce que mon hotel_id est 1 dans le cadre de:

$this->addElement( 'select', 'account', array(
    'multioptions' => $NEED_IT_HERE 
)); 

Voici ma requête/session de saisir le code:J'ai ce code dans ma page de formulaire, mais j'ai besoin de le déplacer dans mon modèle maintenant.

Répondre

1

Alors où est votre problème? Faites une requête appropriée sur votre base de données pour obtenir ces comptes.

Créez un tableau approprié à partir du résultat. (Id => Titre)

Vous pouvez définir des options sur l'élément déjà existant:

$element = $form->getElement('account'); 
$element->setMultiOption($option_array); 

Vous pouvez créer une méthode dans votre classe de formulaire qui acceptent DB obj, Session obj et effectuer les actions nécessaires pour charger et définissez ces options.


model, which is in application/modules/foo/models/DbTable/Social, the model class name is Model_DbTable_Social and the module is foo. Throws Fatal error:

Votre classe db-table doit être nommé probablement:

Foo_Model_DbTable_Social 

Et application.ini doit contenir:

resources.modules[] = 
; (It is autoloader for modules) 

Class 'Model_DbTable_Social' when I try to invoke it in my form. Or is that way which you mention easier?

Il est une bonne pratique demander ces ressources dans __construct comme Chelmertz dit. Voici une conversation agréable sur le sujet connexe: http://www.youtube.com/watch?v=-FRm3VPhseI

Vous pouvez lire ma question sur « où connecter les formes aux modèles »: zend-framework doctrine, and mvc pattern: what kind of layer should connect data between models and forms? Pas trop de solutions si

+0

* Où * dois-je faire la requête pour obtenir ces comptes? Dans le formulaire lui-même? Si oui, comment puis-je référencer la méthode d'invocation de requête à partir de l'instance de formulaire? Comment puis-je réellement relier les choses que je fais ensemble? –

+0

Bien sûr, prenez-le dans le formulaire, assurez-vous d'écouter le conseil "ou vous pouvez créer une méthode dans votre classe de formulaire qui accepterait obj DB, Session obj et effectuer les actions nécessaires pour charger et définir ces options." cependant, de sorte que vous pouvez injecter différentes sources pour vos valeurs. Je laisserais le 'Form_YourClass :: __ construct()' avoir besoin de ces options (hotels comme tableau, par exemple) sinon l'initialisation échouera. – chelmertz

+0

J'ai porté mon code db sur le modèle, qui se trouve dans 'application/modules/foo/models/DbTable/Social', le nom de la classe du modèle est' Model_DbTable_Social' et le module est 'foo'.Lance une erreur fatale: Classe 'Model_DbTable_Social' lorsque j'essaie de l'invoquer dans mon formulaire. Ou est-ce que vous mentionnez cela plus facilement? –