Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework]Własny kontroler
Forum PHP.pl > Forum > PHP > Frameworki
Ikky
Witam od jakiegoś czasu usiłuje zrobić swój własny kontroler który dziedziczył by po zend_controller_action.

Więc tak chce powiedzmy zrobić tak żeby w każdym kontrolerze miał napis test

1) stworzyłem w library/App/Controller/Test.php

  1. <?php
  2. class App_Controller_Test extends Zend_Controller_Action
  3. {
  4.  
  5. public function init()
  6. {
  7. echo "test";
  8. }
  9. }


no i teraz sobie w IndexControllerze zamieniam

Zend_Controller_Action na:

  1. <?php
  2. class IndexController extends App_Controller_Test
  3. {


Wyskakuje mi taki błąd

Fatal error: Class 'App_Controller_Test' not found in /home/users/test/www/application/controllers/IndexController.php on line 2

Co robie źle?
Zyx
Masz całkiem jasno podane, że PHP nie może znaleźć klasy. Jak masz skonfigurowany autoloader?
Ikky
No mam wszystko z najnowszego qucikstarta.

autoloader:

  1. protected function _initAutoload()
  2. {
  3.  
  4. $autoloader = new Zend_Application_Module_Autoloader(array(
  5. 'namespace' => 'Default',
  6. 'basePath' => dirname(__FILE__)
  7. )
  8. );
  9.  
  10.  
  11.  
  12. return $autoloader;
  13. }



index.php na wszelki wypadek

  1. <?php
  2. set_include_path(implode(PATH_SEPARATOR, array(
  3. realpath(dirname(__FILE__) . '/../library'),
  4. )));
  5.  
  6. defined('APPLICATION_PATH')
  7. || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
  8.  
  9. defined('APPLICATION_ENV')
  10. || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));
  11.  
  12. /** Zend_Application */
  13. require_once 'Zend/Application.php';
  14.  
  15. $application = new Zend_Application(
  16. APPLICATION_ENV,
  17. APPLICATION_PATH . '/configs/application.ini'
  18. );
  19. $application->bootstrap();
  20. $application->run();
Elbacer
w pliku INI:
  1. autoloadernamespaces.0 = "My_"

i kontroler w: "\library\My\Controller\Action.php"

  1. <?
  2.  
  3. abstract class My_Controller_Action extends Zend_Controller_Action {
  4.  
  5. public function init() {
  6. }
  7.  
  8. }
  9.  
  10. ?>
Homiczek
Witam

odgrzewam temat bo mam podobny problem.

Na początku powiem że dopiero zaczynam się uczyć Zend'a.

I postanowiłem podpiąć Smarty.

Korzystając z tutoriala jakoś mi się udało smile.gif



Ale chciałbym zrobić, to w ten sposób abym nie musiał w każdym pojedynczym kontrolerze wrzucać kilkunastu linijek inicjalizacyjnych smarty.

A chcę katalog library zenda zostawić w spokoju - tzn nie umieszczać tam własnych klas, aby w razie późniejszych aktualizacji nie zapomnieć tam znowu dodać.

Zrobiłem sobie klasę SmartyController która dziedziczy po Zend_controller_action, i następnie Indexcontroller i resztę dziedziczę po SmartyController....


I jakoś działa, ale chciałbym abym nie musiał w każdym kontrolerze wrzucać require'ów :

CODE
<?php
require('Smarty.php');
require('SmartyController.php');
//class IndexController extends Zend_Controller_Action {
class IndexController extends SmartyController {
function indexAction() {
$this->view->title = "Panel";
}

public function init() {
parent::init();

}
}


Smarty.php to klasy, interfejsy do widoku itp
SmartyControler.php to klasa inicjująca Smarty z konfiguracją katalogów itp

Próbowałem to require'ować w głównym index.php, ale w zależności w którym miejscu to wrzucę, to wyrzuca różne błędy brakujących klas.

Pewnie jest to związane z kolejnością wrzucania klas przez silnik Zenda, a tego niestety nie znam.

Proszę o jakąś podpowiedź jak to obejść.

Pozdrawiam i dziękuję 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.