login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Var naar template

Offline Zyxarix - 13/10/2009 20:33
Avatar van ZyxarixNieuw lid Ik heb dus onlangs de basis van mijn framework geschreven, maar zit nu wat vast bij models maken.

Ik wil eerst gewoon eens testen of ik iets uit de database kan halen, naar de controller sturen en van daar uit naar de view.

Maar ik krijg steeds gewoon mijn lay-out zonder de waarde die hij zou moeten tonen.

In de view staat dat hij $naam moet echo'en, die uit de controller gedefinieerd is.
De controller haalt dit dan weer uit de registry, en de registry heeft dit van het model.

Hij moet dus het eerste record nemen en de naam weergeven.

Tabel

  1. --
  2. -- Tabel structuur voor tabel `test`
  3. --
  4.  
  5. CREATE TABLE IF NOT EXISTS `test` (
  6. `id` int(11) NOT NULL auto_increment,
  7. `naam` varchar(25) NOT NULL,
  8. PRIMARY KEY (`id`)
  9. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;




Misschien helpt deze code:


Index.php controller

  1. <?php
  2.  
  3. class indexController extends baseController {
  4.  
  5. public function index() {
  6.  
  7. include_once(ROOT . DS . 'application' . DS . 'models/test.php');
  8. $test = new Test();
  9.  
  10.  
  11. $this->registry->template->id = $test->iTest_ID;
  12. $this->registry->template->naam = $test->sTest_Naam;
  13.  
  14. $this->registry->template->welkom = 'SimpleCode by Jesse S.';
  15.  
  16. $this->registry->template->show('index2');
  17.  
  18. }
  19.  
  20. }
  21.  
  22. ?>


Index2.php (de view, index2.php omdat andere even in gebruik is ;)

  1. <?php $this->registry->template->show('header'); ?>
  2.  
  3. <h2><?php echo $welkom; ?></h2>
  4.  
  5. <h2><?php echo $naam; ?></h2>
  6.  
  7. <p class="tekst">
  8. Lorem ipsum shizzle.
  9. </p>
  10.  
  11. <?php $this->registry->template->show('footer'); ?>


test.php (Model)

  1. <?php
  2.  
  3. class test {
  4.  
  5. public $iTest_ID;
  6. public $sTest_Naam;
  7.  
  8. public function getTest() {
  9.  
  10. $aData = array();
  11.  
  12. $sQuery = "SELECT * FROM test WHERE id = '1' ";
  13. $rResult = @mysql_query($sQuery);
  14.  
  15. if($rResult == false) {
  16.  
  17. throw new Exception('Query (' .$sQuery. ') mislukt: ' . mysql_error());
  18.  
  19. }
  20.  
  21. if (@mysql_num_rows($rResult) == 0) {
  22.  
  23. throw new Exception('Geen objecten gevonden');
  24.  
  25. }
  26.  
  27.  
  28. $aData = @mysql_fetch_assoc($rResult);
  29.  
  30. $this->registry->iTest_ID = $aData['id'];
  31. $this->registry->sTest_Naam = $aData['naam'];
  32.  
  33. }
  34.  
  35. }
  36.  
  37.  
  38.  
  39. ?>


db.php (Connectie etc.)

  1. <?php
  2.  
  3. class db {
  4.  
  5. private static $instance = NULL;
  6.  
  7. private function __construct() {
  8.  
  9. }
  10.  
  11.  
  12. public static function getInstance() {
  13.  
  14. if (!self::$instance) {
  15.  
  16. self::$instance = mysql_connect('localhost', 'root', 'usbw');
  17. self::$instance .= mysql_select_db('test', self::$instance) or die('Could not select database.');
  18.  
  19. }
  20.  
  21. return self::$instance;
  22.  
  23. }
  24.  
  25. private function __clone() {
  26.  
  27. }
  28.  
  29. }
  30.  
  31. ?>

8 antwoorden

Gesponsorde links
Offline Joost - 13/10/2009 21:31
Avatar van Joost PHP expert Om je te helpen hebben we, denk ik, de template class nodig omdat deze het weergeven van de pagina afhandelt. Waarschijnlijk gaat hier iets fout.
Offline Zyxarix - 13/10/2009 21:41 (laatste wijziging 13/10/2009 21:42)
Avatar van Zyxarix Nieuw lid aub!

  1. <?php
  2.  
  3. /**
  4.  * @author Jesse
  5.  * @copyright 2009
  6.  * @copyright Jesse Struyvelt
  7.  * @package SimpleCode
  8.  * @subpackage simplecode/template
  9.  */
  10.  
  11. Class Template {
  12.  
  13. private $registry;
  14. private $vars = array();
  15.  
  16.  
  17. function __construct($registry) {
  18.  
  19. $this->registry = $registry;
  20.  
  21. }
  22.  
  23. public function __set($index, $value) {
  24.  
  25. $this->vars[$index] = $value;
  26.  
  27. }
  28.  
  29.  
  30. function show($name) {
  31.  
  32. $path = ROOT . DS . 'application' . DS . 'views' . DS . $name . '.php';
  33.  
  34. if (file_exists($path) == false) {
  35.  
  36. throw new Exception('Template not found in '. $path);
  37. return false;
  38.  
  39. }
  40.  
  41. foreach ($this->vars as $key => $value) {
  42.  
  43. $$key = $value;
  44. }
  45.  
  46. include ($path);
  47. }
  48.  
  49.  
  50. }
  51.  
  52. ?>


Offline Joost - 13/10/2009 21:49
Avatar van Joost PHP expert Hmm, was vergeten te vragen, wordt $welkom wel gewoon weergegeven?

Anders moet je even op verschillende plaatsen in je code variabelen gaan dumpen, dan kom je er redelijk snel achter waar het fout gaat.
Offline Zyxarix - 13/10/2009 21:51
Avatar van Zyxarix Nieuw lid Ja. Welkom wordt weergegeven.
Dat werkt perfect. Ik denk dat hij gewoon iets leeg uit de database haalt.. weet het niet.

Heb je misschien een voorbeeld van waar ik ze kan dumpen ?
Offline Joost - 13/10/2009 21:56
Avatar van Joost PHP expert
  1. <?php
  2.  
  3. class test {
  4.  
  5. public $iTest_ID;
  6. public $sTest_Naam;
  7.  
  8. public function getTest() {
  9.  
  10. $aData = array();
  11.  
  12. $sQuery = "SELECT * FROM test WHERE id = '1' ";
  13. $rResult = mysql_query($sQuery);
  14.  
  15. if($rResult == false) {
  16.  
  17. throw new Exception('Query (' .$sQuery. ') mislukt: ' . mysql_error());
  18.  
  19. }
  20.  
  21. if (mysql_num_rows($rResult) == 0) {
  22.  
  23. throw new Exception('Geen objecten gevonden');
  24.  
  25. }
  26.  
  27.  
  28. $aData = mysql_fetch_assoc($rResult);
  29.  
  30. var_dump($aData);
  31.  
  32. $this->registry->iTest_ID = $aData['id'];
  33. $this->registry->sTest_Naam = $aData['naam'];
  34.  
  35. }
  36.  
  37. }
  38.  
  39.  
  40.  
  41. ?>

Kijk eens wat dat oplevert.. ik heb de "@"'s ook even weggehaald, aangezien deze ook errors onderdrukken 
Offline Zyxarix - 13/10/2009 23:14
Avatar van Zyxarix Nieuw lid Niks, helemaal niks.

Ik blijf gewoon mijn lay-out zien..!
Geen errors, niks.

Krijg ook niks door de var dump.

Hopelijk wordt dit snel opgelost want ik wil dit frameworkje kunnen uitbreiden. Toch alvast bedankt Joost. Als je misschien weet hoe, mag je het nog steeds zeggen he
Offline Joost - 13/10/2009 23:16 (laatste wijziging 13/10/2009 23:22)
Avatar van Joost PHP expert Ahja, ik zie het al, je voert in je controller de methode getTest() niet uit Daarbij vul je de data ook niet in in de variabelen, maar in $this->registry, niet bestaat in je model.
Offline Zyxarix - 13/10/2009 23:26 (laatste wijziging 14/10/2009 00:39)
Avatar van Zyxarix Nieuw lid Uhm.

Heb wat zitten spelen met de code en krijg dit nu.

array(2) { ["id"]=> string(1) "1" ["naam"]=> string(5) "Jesse" }


Heb getTest() geactiveerd.

Opgelost!. Ik had per ongeluk de array waarden in de registry gestoken. Zodat ik ze er nietmeer kon uithalen. Nu werkt het gewoon . Bedankt voor je hulp.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.251s