8796 sujets

Développement web côté serveur, CMS

Hello a tous !
Je viens vers vous car ca fait 2 jours que je m'arrache les cheveux sur Zend et je sais que par ici trainent quelques spécialistes du Framework Smiley smile

Je suis donc en train de développer une application modulaire sur un schéma classique backend/frontend, en local sur MAMP.
Tout fonctionne parfaitement, mais lors de la mise sur serveur, ce n'est plus la meme...
Autant dire que je n'y comprends rien.

Mes formulaires qui se chargent bien en local ne veulent pas se charger sur mon serveur, avec erreur de type : Fatal error: Class 'Frontend_Form_Standard_Registration' not found in /var/www/vhosts/it-interaction.com/subdomains/samplesolution/httpdocs/application/modules/frontend/controllers/TestController.php on line 22


Voici tous les elements qui peuvent rentrer dans le probleme :

Je vais prendre pour exemple lorsque je veux acceder a la page :
"http://localhost/SampleSolution/public/frontend/test/form"

Donc voici l'arborescence de mon projet final :

http://samplesolution.it-interaction.com/arbo.png


Voici le fichier application.ini

[production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"

autoloaderNamespaces[] = "App_"

resources.view.helperPath.App_View_Helper = "App/View/Helper"

resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"

resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.params.displayExceptions = 0
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"

resources.modules[] = 

resources.db.adapter = "pdo_mysql"
resources.db.params.username = "root"
resources.db.params.password = "root"
resources.db.params.dbname = "samplesolution"

[staging : production]

[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1

[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.frontController.params.displayExceptions = 1

Voici le fichier global Bootstrap.php (dans le dossier application)
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{

   public function run()
		    {
				// Cela permet d'avoir la configuration disponible de partout dans notre application
		        Zend_Registry::set('config', new Zend_Config($this->getOptions()));
		        parent::run();
		    }

/////////////// AUTOLOAD

	    protected function _initAutoload()
		    {
		
				$moduleLoader = new Zend_Application_Module_Autoloader(array(
				        'namespace' => '', 
				        'basePath'  => APPLICATION_PATH.'/modules'));
				$moduleLoader->addResourceType('form','forms/','Form');

		        
		    }
		  

/////////////// SESSION

		    protected function _initSession()
		    {
				// On initialise la session
		        $session = new Zend_Session_Namespace('appli', true);
		        Zend_Registry::set('session', $session);

				return $session;
		    }
		    

/////////////// LAYOUTS

			protected function _initViewHelpers()
			{
			    $this->bootstrap('layout');
			    $layout = $this->getResource('layout');
			    $view = $layout->getView();
			    $view->doctype('XHTML1_STRICT');
			    $view->headMeta()->appendHttpEquiv('Content-Type', 'text/html;charset=utf-8');
			    $view->headTitle()->setSeparator(' - ');
			    $view->headTitle(' Tutoriel Zend Framework');
			    $view->headLink();
			    
			    $view->addHelperPath('ZendX/JQuery/View/Helper', 'ZendX_JQuery_View_Helper');
			    
			        // Add it to the ViewRenderer
    			$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer');
    			$viewRenderer->setView($view);
 				return $view;
			}
		
						
		    		
}

Mon fichier backend/Bootstrap.php
class Backend_Bootstrap extends Zend_Application_Module_Bootstrap
{  

}

Mon fichier frontend/Bootstrap.php

class Frontend_Bootstrap extends Zend_Application_Module_Bootstrap
{  

}

Mon controller frontend/controllers/TestController.php (j'ai supprimé le traitement du formulaire pour alleger)

class Frontend_TestController extends Zend_Controller_Action
{

    public function init()
    {
         
    }

    public function indexAction()
    {
        $this->view->path = Zend_Loader_Autoloader::getInstance();

    }
    
    public function formAction()
    {
       	$this->view->title = "Ajouter un nouvel utilisateur";
	    $this->view->headTitle($this->view->title, 'PREPEND');
	
	    $form = new Frontend_Form_Standard_Registration(); // On initialise un formulaire correspondant a la classe de formulaire "Album"
	    
    	    $this->view->form = $form; // On balance le formulaire dans la vue

    }
 }

Mon formulaire frontend/forms/standard/Registration.php
class Frontend_Form_Standard_Registration extends Zend_Form
{
    //put your code here
    public function init()
    {
    	
        $this->setAttrib('id', 'registration');
        $this->setMethod(Zend_Form::METHOD_POST);
       
        $name = $this->createElement('text', 'name');
        $name->setLabel('Enter Name');
        $name->setRequired(true);
               
        $name2 = $this->createElement('text', 'name2');
        $name2->setLabel('Enter Name');
        $name2->setRequired(true);
                
        $this->addElement($name);
        $this->addElement($name2);
        $this->clearDecorators();
 
 	$monDeco = new App_Form_Decorator_Composite();
        $this->setElementDecorators(array($monDeco,'FormErrors'));

        $submit = $this->createElement('submit', 'submit');
        $this->addElement($submit);        
        
    }

}

Et ma vue
<?php 
echo $this->form; 

?>

Et voici l erreur que j'ai en distant lorsque je veux afficher le formulaire...

Fatal error: Class 'Frontend_Form_Standard_Registration' not found in /var/www/vhosts/it-interaction.com/subdomains/samplesolution/httpdocs/application/modules/frontend/controllers/IndexController.php on line 8


Si quelqu'un prend le temps de regarder c'est trop sympa (et si il a la solution, la c'est encore mieux)

Alex
Modifié par JohnNada (24 Sep 2010 - 01:29)
Hello...Question idiote. C'est bien la même version du framework qui est installée en local et sur le serveur?
hello,

Renomme frontend/forms/standard/Registration.php par frontend/forms/Standard/Registration.php (majuscule à "Standard")

Ton serveur de local n'est pas case sensitive donc tu n'as pas de problème d'autoloading, ton serveur de production est un unix standard (à première vue) donc case sensitive.

En espérant que ça aidera.

Au passage : ta methode _initAutoload() dans ton Bootstrap sert à rien, par défaut Zend charge les ressources suivantes : models/DbTable, models/mappers, forms, models, plugins, etc.

voir la classe Zend_Application_Module_Autoloader pour plus d'informations.
Modifié par thoas (24 Sep 2010 - 22:23)