Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
J'effectue actuellement des tests sur l'implémentation d'un Framework chez mon client et mon choix s'est arrêté sur deux Framework : CakePHP et Zend Framework.
Pour ce qui est de CakePHP, en une demi journée j'ai réussi à faire ce que je voulais (paramétrage accès base de données, etc etc etc, bref c'est du gâteau...).
En ce qui concerne Zend, l'usine à gaz m'intoxique un peu et après plus d'une journée, je n'arrive même pas à configurer convenablement (pour zend) la gestion des URL.
J'ai essayé n'importe quel chemin pour voir si cela fonctionne (créer même un dossier dans public contenant mes js mais ... nada) et après une journée de débâcle, il me semble inutile de perdre plus de temps.
Quelqu'un aurait-il donc une réponse à m'apporter ? (mauvaise implémentation, etc etc etc)
J'ai bien entendu farfouillé un peu de partout mais ce n'est pas d'une clarté limpide je trouve...
Merci d'avance pour ceux qui pourront m'aider . Dans le cas contraire, l'utilisation de cake pour le MVC avec les librairies de zend me semble une solution alternative honorable (simplicité d'utilisation de cake avec librairies puissantes de zend, même si le mode de compatibilité de cake pour PHP4 me chagrine un peu en terme de performance.).
Mon scripts .htaccess qui se trouve dans le dossier public (à côté de la page index) :
SetEnv APPLICATION_ENV development RewriteEngine On RewriteBase /zend RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php [NC,L]
Le bootsrap :
<?php 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(); } protected function _initSession() { // On initialise la session $session = new Zend_Session_Namespace('zendSession', true); Zend_Registry::set('zendSession', $session); return $session; } protected function _initDoctrine() { // $this->getApplication() // ->getAutoloader() // ->pushAutoloader ( array ('Doctrine', 'autoload' ) ); // //spl_autoload_register ( array ('Doctrine', 'modelsAutoload' ) ); // $manager = Doctrine_Manager::getInstance (); // $manager->setAttribute ( Doctrine::ATTR_AUTO_ACCESSOR_OVERRIDE, true ); // // The Model Loading acts a tad weird - Use Default for now. // //$manager->setAttribute ( Doctrine::ATTR_MODEL_LOADING, Doctrine::MODEL_LOADING_AGGRESIVE); // MODEL_LOADING_CONSERVATIVE // $manager->setAttribute ( Doctrine::ATTR_AUTOLOAD_TABLE_CLASSES, false ); // // $doctrineConfig = $this->getOption('doctrine'); // $conn = Doctrine_Manager::connection($doctrineConfig['dsn'],'doctrine'); // $conn->setAttribute(Doctrine::ATTR_USE_NATIVE_ENUM,true); } protected function _initAutoload() { $moduleLoader = new Zend_Application_Module_Autoloader(array( 'namespace' => '', 'basePath' => APPLICATION_PATH)); return $moduleLoader; } /** * @return Zend_Navigation */ protected function _initNavigation() { $router = new Zend_Controller_Router_Rewrite(); $controller = Zend_Controller_Front::getInstance(); $controller ->setControllerDirectory('./application/controllers') ->setRouter($router) ->setBaseUrl('/zend') ->setParam('noErrorHandler', TRUE); $response = $controller->dispatch(); $view = $this->bootstrap('layout')->getResource('layout')->getView(); $config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml', 'nav'); $view->navigation(new Zend_Navigation($config)); } protected function _initTranslate() { // On récupère la session du site. $session = Zend_Registry::get('zendSession'); // On définit la langue par défaut sur le site. $locale = new Zend_Locale('fr'); // On enregistre cette langue dans notre registre. Zend_Registry::set('Zend_Locale', $locale); // Si la langue existe en session, on récupère la session, sinon on prend la valeur par défaut. $langLocale = isset($session->lang) ? $session->lang : $locale; // On lance l'objet de traduction en lui passant les fichiers de langues $translate = new Zend_Translate('array',APPLICATION_PATH.'/languages/fr_FR.php','fr'); $translate->addTranslation(APPLICATION_PATH.'/languages/en_US.php','en'); // On lui passe la langue courante du site $translate->setLocale($langLocale); // Important pour utiliser le helper. Zend_Registry::set('Zend_Translate', $translate); } protected function _initView() { // Initialisation de la vue et des helpers de vue $view = new Zend_View(); $view->setEncoding('ISO-8859-1'); $view->doctype('XHTML1_STRICT'); // On ajoute le dossier des helpers $view ->addHelperPath(APPLICATION_PATH . '/views/helpers'); $view -> headLink()->appendStylesheet($view->baseUrl().'/css/site.css'); // On charge l'helper qui va se charger de la vue $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer'); $viewRenderer->setView($view); return $view; } }
Le controller gérant l'ajout de ses propres scripts/styles :
<?php class AnomaliesController extends Zend_Controller_Action { public function indexAction() { $view = $this -> initView(); $view -> headScript()->appendFile($view -> baseUrl().'/js/jquery/jquery-1.4.2.min.js'); $view -> headScript()->appendFile($view -> baseUrl().'/application/js/jquery/jquery-ui-1.8.custom.min.js'); $view -> headScript()->appendFile($view -> baseUrl().'/js/jquery/ui.multiselect.js'); $view -> headScript()->appendFile($view -> baseUrl().'/js/jquery/ui-multiselect-fr.js'); $view -> headScript()->appendFile($view -> baseUrl().'/js/jquery/grid.locale-fr.js'); $view -> headScript()->appendFile($view -> baseUrl().'/js/jquery/jquery.jqGrid.min.3.6.5.js'); $view -> headStyle() -> appendStyle(array($view -> baseUrl().'/css/jqgrid/ui.jqgrid.css', $view -> baseUrl().'/css/jquery-ui/redmond/jquery.ui.all.css')); // TODO: Retrieve all messages. } }
EDIT : il semblerait que la redéfinition "fonctionne" si il n'y a pas index.php dans l'URL et SI les fichiers sont dans le dossier public. mais comment faire pour que ca aille dans le dossier /zend/application/js/ au lieu de /zend/public/js ?
merci encore
Dernière modification par laville (22-06-2010 11:34:54)
Hors ligne
Pourquoi tu veux mettre des js dans application ??
Le dossier application n'est pas/doit pas être visible, donc aucun interet de mettre tes js dans un répertoire 'invisible'.
As tu compris l'interet du .htaccess ? de son role ? ou pointe ton document root de ton serveur web ?
Hors ligne
Disons que c'est dans un but "multi-applications", mais peut être que mon approche n'est pas la bonne (disons que j'aurais fait sauter le dossier public et que j'y aurais directement accédé depuis l'index.php du module).
Au final, il me semble plus juste de déporter au pire les librairies utilisées et conserver l'architecture telle quelle.
Pour ce qui est du .htaccess, oui même si je ne suis pas un expert, mais si un utilisateur met index.php ca plante :s (une autre personne a créé un post pour ce problème).
Je pense que je peux mettre résolu même si je ne l'ai pas implémenté comme je le souhaitais.
Merci quand même
Hors ligne
Pages: 1