Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZF] problem z kontrolerem
Forum PHP.pl > Forum > PHP > Frameworki
phpion
Hejka,
mam taką strukturę katalogów:
projekt
--- app
------ frontend
--------- controllers
------------ ArtykulController.php
--------- models
------------ Person
--------------- Person_Author.php
------------ Author.php
------------ Article.php
--------- views
--- lib
------ Zend
------ mojeklasy
--- www
------ .htaccess
------ index.php

index.php
  1. <?php
  2. require_once('./__autoload.php');
  3.  
  4. $db = new Zend_Db_Adapter_Pdo_Mysql(array(
  5. 'host'  => 'localhost',
  6. 'username' => 'root',
  7. 'password' => '',
  8. 'dbname'  => 'baza'
  9. ));
  10.  
  11. $db->setFetchMode(1);
  12.  
  13. Zend_Controller_Front::run('/home/phpion/public_html/nowy.benchmark.pl/app/frontend/controllers');
  14. ?>


ArtykulController:
  1. <?php
  2. class ArtykulController extends Zend_Controller_Action {
  3. public function pokazAction() {
  4. global $db;
  5.  
  6. $q = 'SELECT * FROM articles WHERE id=1';
  7. $q = $db->query($q);
  8. $q->setFetchMode(Zend_Db::FETCH_NUM);
  9.  
  10. $r = $q->fetch();
  11.  
  12. $this->article = new Article($r[0], $r[1], $r[2], $r[3]);
  13. $this->edek = "edek";
  14. }
  15. }
  16. ?>


Article.php
  1. <?php
  2. /**
  3.  * Klasa przechowująca dane na temat artykulu.
  4.  *
  5.  * @author phpion
  6.  */
  7. class Article {
  8. /**
  9.  * Identyfikator artykulu.
  10.  *
  11.  * @access protected
  12.  * @var string
  13.  */
  14. protected $id;
  15.  
  16. /**
  17.  * Tytul artykulu.
  18.  *
  19.  * @access protected
  20.  * @var string
  21.  */
  22. protected $title;
  23.  
  24. /**
  25.  * Data utworzenia artykulu.
  26.  *
  27.  * @access protected
  28.  * @var datetime
  29.  */
  30. protected $date;
  31.  
  32. /**
  33.  * Artykul widoczny lub ukryty/
  34.  *
  35.  * @access protected
  36.  * @var boolean
  37.  */
  38. protected $visible;
  39.  
  40. /**
  41.  * Tablica stron nalezacych do artykulu.
  42.  *
  43.  * @access protected
  44.  * @var array
  45.  */
  46. protected $pages = array();
  47.  
  48. /**
  49.  * Tablica autorow artykulu.
  50.  *
  51.  * Sklada sie z obiektow typu Person_Author
  52.  */
  53. protected $authors = array();
  54.  
  55. /**
  56.  * Tworzy obiekt artykulu.
  57.  *
  58.  * @access public
  59.  * @param integer $id Identyfikator artykulu.
  60.  * @param string $title Tytul calego artykulu
  61.  */
  62. public function __construct($id, $title, $date, $visible) {
  63. $this->id = (int)$id;
  64. $this->title = $title;
  65. $this->date = $date;
  66. $this->visible = $visible;
  67.  
  68. $this->loadAuthors();
  69. }
  70.  
  71. /**
  72.  * Wczytuje autorow danego artykulu.
  73.  *
  74.  * @access protected
  75.  */
  76. protected function loadAuthors() {
  77. global $db;
  78.  
  79. $q = 'SELECT authors.* FROM articles_authors LEFT JOIN authors ON articles_authors.aut
    hor_id=authors.id WHERE articles_authors.article_id='
    .$this->id.' ORDER BY authors.surname';
  80. $q = $db->query($q);
  81. $q->setFetchMode(Zend_Db::FETCH_NUM);
  82.  
  83. while ($r = $q->fetch()) {
  84. array_push($this->authors, new Person_Author($r[0], $r[1], $r[2], $r[3]));
  85. }
  86. }
  87. }
  88. ?>


Przy wywołaniu http://localhost/artykul/pokaz dostaję:
  1. Fatal error: Uncaught exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller specified (error)'
.
Modyfikując:
  1. <?php global $db; ?>

na:
  1. <?php $db = new Zend_Db_Adapter_Pdo_Mysql(array(
  2. 'host'  => 'localhost',
  3. 'username' => 'root',
  4. 'password' => '',
  5. 'dbname'  => 'baza'
  6. ));?>

wszystko śmiga tj. obiekty są tworzone poprawnie. Co robię źle? O czym zapomniałem?
Z góry dzięki za pomoc.

I przy okazji: czy każda akcja w kontrolerze musi posiadać swój plik widoku (jeśli dobrze to nazywam) w views/scripts/{$nazwa_kontrolera}/{$nazwa_akcji}? Aktualnie wgrywam tam puste pliki aby ominąć występujące błędy (podobne do powyższego).
nrm
Po co pchasz DB do kontrolera?
wolditm
Cytat
musi posiadać swój plik widoku

jeżeli nie używasz Zend_View, dodajesz param do FrontControllera, wtedy kontroler w ogóle nie będzie ładował Zend_View itd, możesz użyć coś takiego:
  1. <?php
  2. $front = Zend_Controller_Front::getInstance();
  3. $front->setParam( 'noViewRenderer', true );
  4. ?>


A jak już chcesz koniecznie dodawać obiekt DB do kontrolera, to już lepiej tak:

  1. <?php
  2. $front = Zend_Controller_Front::getInstance();
  3. $front->setParam( 'db_obj', new Zend_Db_Adapter_Pdo_Mysql( $config ) );
  4. ?>


potem w danym kontrolerze:

  1. <?php
  2. class ArtykulController extends Zend_Controller_Action 
  3. {
  4.  public function init()
  5.  {
  6. $this->db = $this->_getParam( 'db_obj' );
  7.  }
  8. }
  9. ?>
phpion
Heh, w sumie racja, dzięki za pomoc smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.