Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour à tous,
J'utilise dans mon projet un module par défaut, et une module "precos".
Le contrôleur PrecosController de mon module Precos hérite du contrôleur ItemController de mon module default.
J'ai ajouté ces deux lignes de code dans mon contrôleur:
$this->_helper->viewRenderer->setNoController();
$this->_helper->viewRenderer->setScriptAction('item/search');
Ce qui fait qu'aujourd'hui, la vue associée à l'action "search" de mon contrôleur PrecosController se trouve dans
=>application/modules/precos/views/scripts/item/search.phtml.
Je voudrais qu'automatiquement la redirection se fasse sur le fichier search du module default:
=>application/modules/default/views/scripts/item/search.phtml.
Pour cela j'ai ajouté cette ligne de code:
$this->_helper->viewRenderer->setViewBasePathSpec(PATH_ROOT.'application'.DS.'modules'.DS.'default'.DS.'views');
Mais j'obtiens alors ce message d'erreur:
Exception information:
Message: script 'item/search.phtml' not found in path (C:/Program Files/Zend/Apache2/htdocs/precos/application/modules/precos/views\scripts/)
Comme s'il ignorait ma modification de ViewBasePath. Alors qu'un :
echo $this->_helper->viewRenderer->getViewBasePathSpec();
m'affiche:
C:\Program Files\Zend\Apache2\htdocs\precos\application\modules\default\views
Je ne comprends donc pas ce qui coince. Si quelqu'un avait une idée?
merci d'avance pour votre aide
Hors ligne
alors en fait j'ai fini par effectuer ma modification dans un plugin, ainsi mon setViewBasePathSpec est pris en compte! mon code est:
class AppliPlugin extends Zend_Controller_Plugin_Abstract{ public function dispatchLoopStartup($request){ //je redirige sur le module par défaut si le fichier spécifique n'existe aps //et s'il ne s'agit aps du controller index $vr = Zend_Controller_Action_HelperBroker::getExistingHelper('viewRenderer'); $suffix=$vr->getViewSuffix(); $ctl=$request->getControllerName(); $action=$request->getActionName(); if(($ctl!='index')&&($ctl!='auth')){ $file_spec=$vr->getModuleDirectory().DS.'views'.DS.'scripts'.DS.$ctl.DS.$action.'.'.$suffix; //echo $file_spec; if(!file_exists($file_spec)){ $chemin_vues=PATH_ROOT.'application'.DS.'modules'.DS.'default'.DS.'views'; $vr->setViewBasePathSpec($chemin_vues) ->setViewScriptPathSpec('item'.DS.':action.:suffix');// par défaut : :controller/:action.:suffix } } } }
mais du coup mes aides de vue ne s'affichent pas car la classe attendue est précédée du préfixe "nom_du_module" alors que je suis dans le répertoire default.
Le message d'erreur est:
<b>Warning</b>: Exception caught by form: Plugin by name 'AffItem' was not found in the registry; used paths: Maq_View_Helper_: C:/Program Files/Zend/Apache2/htdocs/zf_pvi_ria/application/modules/default/views\helpers/ Zend_View_Helper_: Zend/View/Helper/ Stack Trace: #0 C:\Program Files\Zend\ZendServer\share\ZendFramework\library\Zend\View\Abstract.php(1182): Zend_Loader_PluginLoader->load('AffItem') #1 C:\Program Files\Zend\ZendServer\share\ZendFramework\library\Zend\View\Abstract.php(618): Zend_View_Abstract->_getPlugin('helper', 'AffItem') #2 C:\Program Files\Zend\ZendServer\share\ZendFramework\library\Zend\View\Abstract.php(344): Zend_View_Abstract->getHelper('AffItem') #3 C:\Program Files\Zend\Apache2\htdocs\zf_pvi_ria\application\modules\default\views\scripts\item\form.phtml(12): Zend_View_Abstract->__call('AffItem', Array) #4 C:\Program Files\Zend\Apache2\htdocs\zf_pvi_ria\application\modules\default\views\scripts\item\form.phtml(12): Zend_View->AffItem(Object(Zend_Form_Element_Hidden))
J'ai vu que le problème venait en fait du _prefixToPaths du Zend_Loader_PluginLoader mais je ne réussis pas à trouver comment modifier sa valeur...si quelqu'un pouvait m'aider.
merci d'avance
Hors ligne
En cherchant un peu j'ai trouvé ça :
$this->view->setScriptPath(PATH_ROOT.'application'.DS.'modules'.DS.'default'.DS.'views'.DS.'scripts'.DS);
Je pense que ça peut t'aider si j'ai bien saisi ton problème.
Hors ligne