login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Functie aanroepen ZEND-raamwerk

Offline advertentiep - 18/03/2016 12:46 (laatste wijziging 18/03/2016 15:10)
Avatar van advertentiepPHP interesse Beste Leden,

Ik ben heel erg benieuwd hoe ik d.m.v. een klik op een button in een formulier een functie aan kan sturen.

Ik ben heel erg gewend om met method=post te werken, maar OOP is nieuw voor mij. Ik heb me nu al een aantal dagen verdiept in controllers, templates etc dat gaat verder prima.

Plaatscode: 142491

Plaatscode: 142492

mod edit: volgende keer graag direct op plaatscode.be

12 antwoorden

Gesponsorde links
Offline Thomas - 18/03/2016 13:15
Avatar van Thomas Moderator Waar is je <form> tag?

Dit is een heleboel niet echte relevante code als je het mij vraagt. Had Zend niet een mini cursus waarbij precies het samenspel tussen controller en andere onderdelen werd omschreven?

<?php echo ... ?> of <?= ... ?> staat los van de programmeervorm.
Offline advertentiep - 18/03/2016 13:29
Avatar van advertentiep PHP interesse
  1. class Complete_Platform_Forms_Abstract
  2. {
  3. public $elements = array();
  4. public $horizontal_form = false;
  5.  
  6.  
  7. function __construct($horizontal_form = false)
  8. {
  9. $this->horizontal_form = $horizontal_form;
  10. }
  11.  
  12. public function render()
  13. {
  14. if ($this->horizontal_form)
  15. {
  16. $form = '<form method="post" role="form" class="form-horizontal">';
  17. }
  18. else
  19. {
  20. $form = '<form method="post" role="form">';
  21. }
  22.  
  23. foreach ($this->elements as $key => $element)
  24. {
  25. $form .= $element;
  26. }
  27. $form .= '</form>';
  28.  
  29. return $form;
  30. }
  31. }


forms > abstract.php
Offline Thomas - 18/03/2016 14:24
Avatar van Thomas Moderator Is het bovenstaande iets dat Zend predikt?

Waar is je action?

Als je niet submit naar een bepaalde actie zou je in je controller moeten controleren of de HTTP methode GET of POST is? Wat mij een lelijke constructie lijkt.
Offline advertentiep - 18/03/2016 14:38
Avatar van advertentiep PHP interesse Er wordt geen gebruik gemaakt van action in een form zoals ik het zie. Een button linkt naar een pagina waar de gegevens worden opgevraagd.
Offline Thomas - 18/03/2016 15:11
Avatar van Thomas Moderator Euh, het lijkt mij sterk dat ZF op deze manier de normale werking van HTTP/HTML buigt.

Waar heb jij deze werkwijze vandaan? Of heb je deze zelf verzonnen?
Offline advertentiep - 18/03/2016 15:40
Avatar van advertentiep PHP interesse Heb je er wat aan als ik inzage geef in een form wat wel werkt (login) ?
Offline Thomas - 18/03/2016 21:38 (laatste wijziging 18/03/2016 21:39)
Avatar van Thomas Moderator Heb nog even in een oud codefragment bekeken, dit is waarschijnlijk nog ZF versie 1.

Hierin stuur je je formulier wel de goede kant op met een form action, zodat de goede controller wordt aangesproken (in dit voorbeeld betreft het een contactformulier):

De (index) controller: /application/controllers/IndexController.php
  1. <?php
  2. class IndexController extends Zend_Controller_Action
  3. {
  4. // ...
  5.  
  6. public function contactAction() {
  7.  
  8. $this->view->processed = false;
  9.  
  10. if ($this->_request->isPost()) {
  11. // valideer en verwerk contactformulier, wat resulteert in een success status:
  12. $this->view->success = ...; // true of false
  13. $this->view->processed = true;
  14. }
  15.  
  16. $this->render();
  17. }
  18.  
  19. // ...
  20. }
  21. ?>

De view: /application/views/scripts/index/contact.phtml:
  1. <?php
  2. if ($this->processed) {
  3. if ($this->success) {
  4. ?><p class="block">Het bericht is succesvol verstuurd.</p><?php
  5. } else {
  6. ?><p class="block">Het bericht is niet succesvol verstuurd.</p><?php
  7. }
  8. } else {
  9. ?><form action="<?php echo $this->basePath ?>/index/contact" method="post">
  10. ...
  11. </form><?php
  12. }
  13. ?>

Hier zit nog wel die rare split in (wel of geen POST) maar de action stuurt je wel de goede kant op (naar de juiste controller). Mogelijk is dit in ZF 2 compleet anders? Of welke werkwijze hanteer jij? En waar loop je precies vast (wat werkt er niet)?
Offline advertentiep - 20/03/2016 11:37
Avatar van advertentiep PHP interesse hmm.. Ik heb even naar andere forms gekeken, daar wijkt deze wijze niet van af.
Moet ik het niet zoeken naar het probleem in jQuery ?

als button met ID wordt gehit dan ... ?

Offline advertentiep - 20/03/2016 11:37 (laatste wijziging 20/03/2016 11:54)
Avatar van advertentiep PHP interesse ok, ik het mapjes AJAX > controller stond de volgende code:
  1. public function __construct($application = null, $view = null)
  2. {
  3. parent::__construct($application, $view);
  4. switch ($this->getRequest()->getParam('data-trigger'))
  5. {
  6. case "buttons":
  7. $this->getButtons();
  8. break;


De functie getButtons
  1. private function getButtons()
  2. {
  3. $view = new Zend_View();
  4. $view->setBasePath(COMPLETE_PLATFORM_PATH . '/Ajax');
  5. $view->setScriptPath(COMPLETE_PLATFORM_PATH . '/Ajax/Views');
  6. $this->setView($view);
  7.  
  8. if ('category' === $this->getRequest()->getParam('type'))
  9. {
  10. $buttons = $this->getDb()
  11. ->select()
  12. ->from('products')
  13. ->where('product_category_id = ?', $this->getRequest()->getParam('id'))
  14. ->query(Complete_Platform::FETCH_TYPE)
  15. ->fetchAll();
  16. foreach ($buttons as $key => $button)
  17. {
  18. $button->data_type = 'product';
  19. $button->data_id = $button->product_id;
  20. $button->button_name = $button->product_name;
  21. $buttons[$key] = $button;
  22. }
  23. $this->getView()->assign('type', 'products');
  24. $this->getView()->assign('buttons', $buttons);
  25. die($this->getView()->render('Buttons.phtml'));
  26. }
  27.  
  28. if ('product' === $this->getRequest()->getParam('type'))
  29. {
  30. $product = $this->getDb()
  31. ->select()
  32. ->from('products')
  33. ->where('product_id = ?', $this->getRequest()->getParam('id'))
  34. ->query(Complete_Platform::FETCH_TYPE)
  35. ->fetch();
  36.  
  37. foreach ($product as $key => $value)
  38. {
  39. $this->getView()->assign($key, $value);
  40. }
  41. die($this->getView()->render('TicketRow.phtml'));
  42. }
  43. }


buttons.phtml
  1. <input type="hidden" id="data-type" value="<?php echo $this->type; ?>" />
  2. <?php foreach ($this->buttons as $key => $button) { ?>
  3. <div class="button <?php echo $button->data_type; ?>" data-type="<?php echo $button->data_type; ?>" data-id="<?php echo $button->data_id; ?>">
  4. <?php echo $button->button_name; ?>
  5.  
  6. <?php if ('product' == $button->data_type) { ?>
  7. <span class="label number"><?php echo $button->data_id; ?></span>
  8. <?php } ?>
  9. </div>
  10. <?php } ?>


Ik weet niet of ik goed zit, op de index (waar het probleem zit - de button niet werkt) zie ik verder geen van deze functies aangeroepen worden, dus wellicht staat dit er geheel buiten.

Offline Flex1986 - 20/03/2016 12:12
Avatar van Flex1986 Gouden medaille

Senior Member
Zou je de volledige HTML kunnen plaatsen? Je HTML is nogal een zooitje en er zitten wat fouten in die misschien voor problemen zouden kunnen zorgen.

Bijvoorbeeld in http://www.plaatscode.be/142491 van lijn 280 to 287 zitten een paar foutjes.

1. Voor de submit button zit een lege <a> die gesloten wordt, op het einde van die regel zit nog een sluitings tag.
2. Op 287 wordt een form gesloten die in je HTML nooit geopend wordt, in Complete_Platform_Forms_Abstract zit de form sluiting tag ook. Alhoewel ik het idee heb dat deze code niet gebruikt wordt.

En over het algemeen lijkt het alsof je een beetje last heb van spaghetti code.
Offline Thomas - 20/03/2016 16:41
Avatar van Thomas Moderator Indien de button niet werkt en deze werkt via JavaScript/jQuery zou ik eerst eens kijken of JavaScript fouten produceert. En anders is het inderdaad mogelijk HTML. Als daar iets fout zit en je voert een JavaScript operatie uit die niets zinnigs zou opleveren (niet bestaand id of wat dan ook) of door de HTML-constructie niet werkt houdt jQuery zich meestal doof .
Offline advertentiep - 21/03/2016 09:15 (laatste wijziging 23/03/2016 12:27)
Avatar van advertentiep PHP interesse  Flex bedankt voor je reactie. De 7 regels HTML code zal ik direct aanpassen. (er staat evt. meer HTML 6 posts geleden).

Thomas daar ga ik nu mee door!

Bedankt voor de reacties ik hoop met een oplossing te komen en anders leg ik het probleem nog een keer voor.

Flex; de code is verre van schoon, echter heeft een kennis gevraagd of ik me in zijn aangeschafte (te goedkoop) systeem dit probleem wil oplossen. Het is dus niet aan mij (wat ik ook niet zou kunnen) om een soortgelijk systeem van 0 te bouwen.

OK bedankt Flex & Thomas!
  1. <form method="post" id="offerte-form" role="form" <?php echo $enctype; ?>>
en nog een aantal wijzigingen heeft me aan een nieuw probleem geholpen, maar ik ben een stap verder!

Ik moet wel zeggen dat ik buiten de kracht van OOP ben gaan werken.
Ik heb in een view *.phtml bestand gebruik gemaakt van:
  1. if (IsSet($_POST[''])) ...
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.257s