2011-10-15 4 views
0

* * Édition2: Core.php n'a pas été trouvé car Bootstrap.php requis Core.php inclus require_once 'C: \ wamp \ www \ PhpProject1 \ application \ Core \ Core. php '; résolu mon problème **Zend Framework: Fonction d'appel d'un autre fichier


J'utilise zendframework et je créé un nouveau dossier avec le fichier de base/core.php pour mes fonctions que je vais utiliser dans mes contrôleurs et ailleurs. Mais quand j'essaye de tester une fonction dans mon Core.php rien n'apparaîtra. Je pense que j'appelle le core.php incorrectement mais je ne suis pas sûr de ce que l'erreur est.

application/controllers/

IndexController.php

class IndexController extends Zend_Controller_Action 
{ 

    public function init() 
    { 
     $this->tournamentAction(); 
    } 

    public function indexAction(){   

    } 

    public function tournamentAction() 
    {    
     $bleh = new Core(); 
     $this->view->ha = $bleh->yo(); 
     $this->renderScript('tournament/index.phtml');    
    }  
} 
demande

/Core/

core.php

class Core{ 

    public function init(){ 

    } 

    public function indexAction(){ 

    } 
    public function yo(){ 
     $text = 'This is my function Yo'; 
     return $text; 
    } 
demande

/views/scripts/tournois/index .phtml

$this->ha; 
echo "hello"; 

Édition: Le rapport d'erreur est agréable ha! C'est l'erreur que je reçois.

!) Fatal error: Class 'Core' not found in C:\wamp\www\PhpProject1\application\controllers\IndexController.php on line 19 
Call Stack 
# Time Memory Function Location 
1 0.0006 678944 {main}() ..\index.php:0 
2 0.0275 3090632 Zend_Application->run() ..\index.php:26 
3 0.0275 3090632 Zend_Application_Bootstrap_Bootstrap->run() ..\Application.php:366 
4 0.0275 3090728 Zend_Controller_Front->dispatch() ..\Bootstrap.php:97 
5 0.0446 4801056 Zend_Controller_Dispatcher_Standard->dispatch() ..\Front.php:954 
6 0.0456 4823424 Zend_Controller_Action->__construct() ..\Standard.php:268 
7 0.0547 5211576 IndexController->init() ..\Action.php:133 
8 0.0547 5211576 IndexController->tournamentAction() ..\IndexController.php:8 
+0

Vous n'avez jamais 'echo' ou' print' le '$ this-> ha'. – PeeHaa

+0

Je viens de faire ce changement mais il n'a toujours rien imprimé. – tiggles

+0

Est-ce qu'il est imprimé quand vous faites: echo $ this-> ha; mourir; – PeeHaa

Répondre

0

Dans votre view vous:

$this->ha; // this doesn't do anything without an echo/print 

Vous avez également dit:

Je pense que je fais appel à la core.php mal, mais je ne suis pas sûr de ce que l'erreur est.

Si c'est le cas, vous devez activer le rapport d'erreurs.

Ajouter ceci au début de votre fichier d'amorçage:

problème
error_reporting(E_ALL | E_STRICT); 
ini_set("display_errors", 1); 
+0

Haha remercie le rapport d'erreur aidera bien. J'ai édité ma question à la sortie de l'erreur. Il semble qu'il ne peut pas trouver ma classe Core.php. Est-ce que je l'appelle incorrectement ou dois-je changer les paramètres pour qu'il soit vu? Merci pour votre aide – tiggles

+0

@ user915946: si ma réponse était utile, vous pouvez la marquer comme réponse :-) – PeeHaa

1

Vous est que le chargeur automatique ne peut pas trouver votre classe de base.

Habituellement, je structure mon application en utilisant un dossier de bibliothèque où tous mes modèles et outils se terminent.

Dans votre cas, je créerais dans le dossier de la bibliothèque un dossier appelé MyProject, à l'intérieur, vous pouvez mettre votre classe core.php, mettez vous devrez corriger son nom qui conduit à:

bibliothèque/MyProject/core.php

class MyProject_Core{ 

public function init(){ 

} 

public function indexAction(){ 

} 
public function yo(){ 
    $text = 'This is my function Yo'; 
    return $text; 
} 

Bien sûr, vous feriez appeler votre classe ainsi:

$coreInstance = new MyProject_Core(); 

Mettez cette fonction dans votre application/Bootstrap.php:

protected function _initAutoload() 
{ 
    $autoloader = Zend_Loader_Autoloader::getInstance(); 
    $autoloader->registerNamespace('MyProject_'); 
    $autoloader = new Zend_Application_Module_Autoloader(array(
      'namespace' => '', 
      'basePath' => APPLICATION_PATH)); 
    return $autoloader; 
} 

Ensuite, le Zend_Loader devrait trouver votre classe sans aucun problème.

+0

+1 pour les outils/la logique spécifiques dans le dossier de la bibliothèque et l'autochargeur, mais je pense que les modèles devraient rester dans les modèles ou le module/dossier des modèles –

+0

Oui, j'avoue que c'est un choix personnel qui pourrait être discuté mais je considère souvent mon modèle comme une partie de la bibliothèque puisqu'ils ne dirigent pas souvent l'action de l'utilisateur final. – AsTeR