2010-07-21 5 views
0

J'ai travaillé sur un projet de framework zend sur localhost (OS: Snow Leopard) et quand j'ai téléchargé les fichiers sur le serveur d'hébergement (hébergement mutualisé) j'ai eu quelques erreurs sur une aide à la vue que j'utilisais Là.Zend View Helper problème étrange

Plus précisément:
La structure du projet est comme ceci: (i ommited des sous-dossiers non pertinents et les chiffres dans la parenthèse est juste pour la référence ici, ce ne sont pas inclus dans le nom du dossier dans le projet)

application 
-configs 
-controllers 
-layouts 
--scripts 
-models 
-modules 
--admin 
---controllers 
---models 
---views(2) 
----filters 
----helpers(2) 
----scripts 
-views(1) 
--helpers(1) 
--scripts 
library 
public 

dans les aides (1) dossier j'ai une aide de vue, BaseURL.php:

class Zend_View_Helper_BaseURL 
{ 
    function baseURL() 
    { 
     $fc = Zend_Controller_Front::getInstance(); 
     return $fc->getBaseUrl(); 
    } 
} 

Je l'utilise, par exemple, dans la mise en page pour écrire les chemins pour des choses comme les fichiers CSS, fichiers JS , quelque chose comme ceci:

<script src="<?php echo $this->baseURL();?>/public/js/somejavascript.js></script> 

Et généralement je l'utilise quand j'ai besoin de l'URL de base (pas seulement dans les dispositions, aussi dans les vues). J'ai utilisé le même assistant dans le module 'default' de l'application et dans le module 'admin' (modules/admin/...). Localement, tout s'est bien passé, pas de problèmes. Quand j'uploadé le projet, j'ai des erreurs telles que:

An error occurred 
Application error 
Exception information: 

Message: Plugin by name 'BaseURL' was not found in the registry; used paths: Cmsadmin_View_Helper_: /path_to_site_like_public_html/application/modules/cmsadmin/views/helpers/ Zend_View_Helper_: Zend/View/Helper/ 

L'erreur ci-dessus était pour une ligne en utilisant $ this-> baseURL() dans la mise en page d'administration (qui est appelé dans le module d'administration). Au début, je pensais peut-être que l'assistant est déclaré dans un autre module (le module par défaut), il n'est pas trouvé par le cadre dans le module d'administration. Mais pourquoi tout fonctionne localement? Je ne comprends pas. De plus, si je change $ this-> baseURL() en $ this-> baseUrl() dans le même fichier layout admin.phtml, dans le module admin, tout fonctionne (en ligne et localement).

Si quelqu'un pouvait m'éclairer à quoi que ce soit que je manque, je l'apprécierais.

P.S .: Comme ce n'est pas encore clair dans ma tête, peut-être que quelqu'un pourrait me dire: un assistant déclaré dans un module est disponible dans tous les modules du site? (Le développement local m'a dit que c'est, depuis son travail localement, mais alors qu'est-ce qui ne va pas avec le projet téléchargé?).

Merci.

Répondre

0

Vous devez préfixer votre assistant d'affichage avec Cmsadmin_View_Helper_ et non Zend_View_Helper_ comme décrit dans le message d'erreur. Le message d'erreur indique les chemins d'accès aux différents préfixes.

+0

Deux choses que je voudrais mentionner: 1. Je fais avoir une aide dans le module cmsadmin, et son nom AdminBaseURL.php, et le code est: class Zend_View _Helper_AdminBaseURL { fonction adminBaseURL() { $ fc = Zend_Controller_Front :: getInstance(); return $ fc-> getBaseUrl(). "Cmsadmin /"; } } et 2. Pourtant, pourquoi cela fonctionne quand j'utilise baseUrl() et non baseURL() dans l'état que les choses sont maintenant? – eemerge

+0

P.S. et une troisième chose à mentionner: j'ai aussi un autre assistant appelé class Zend_View_Helper_MediaDir dans le même dossier: cmsadmin/views/helpers, et celui-ci fonctionne sans aucun problème. – eemerge

1

Cocher cette

$ this-> baseUrl (''); Le maintien du paramètre null peut résoudre le problème en maintenant le paramètre

. vous obtiendrez le baseurl dans la mise en page et aussi dans default.php.

0

Remplacer ceci: -

<script src="<?php echo $this->baseURL();?>/public/js/somejavascript.js></script> 

avec:

<script src="<?php echo $this->baseUrl();?>/public/js/somejavascript.js></script> 

pas: - Utilisez toujours $this->baseUrl(); son cas sensibles

Questions connexes