Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 07-04-2011 20:05:46

J-C Bubbendorf
Nouveau membre
Date d'inscription: 07-04-2011
Messages: 5

[Zend_Controller_Front][Latest] Erreur 404 tout le temps...

Bonjour smile .
Je m'adresse ici aux membres qui connaissent bien le Zend Framework - enfin surtout son usage dans le cadre d'une application MVC.

** Premier (et principal) problème : les erreurs 404

J'utilise donc le Zend Framework pour gérer l'organisation MVC d'un CMS que je suis en train de concevoir (Webnel), mais je veut dévier de son mode de fonctionnement habituel, et ce en deux points principaux.
   
- Tout d'abord, je veut que l'URL a parser pour déterminer le contrôleur soit non pas l'URL de la page appelée avec de l'URL Rewriting imposé, mais placée dans une variable GET (originalement appelée u pour "Url"). Dans ce cadre, j'aimerai savoir si faire :

Code:

[lang=php] 
<?php   // $front contient l'objet Zend_Controller_Front. BASE_URI contient en gros 'http://' . $_SERVER['SERVER_NAME'] . $_SERVER['PHP_SELF'] 
    $url = isset($_GET['u']) && !empty($_GET['u']) ? $_GET['u'] : 'index.html';
    $request = new Zend_Controller_Request_Http(BASE_URI . $url);
    $front->setRequest($request);
?>

modifie l'URL à parser pour obtenir le contrôleur, et, si ce n'est pas le cas, comment faire.
- Ensuite, je désire gérer les routes de mon CMS de façon plus fine ; pour cela, j'utilise Zend_Controller_Router_Route_Regex associé à une série de fichiers de configuration au format XML suivant :

Code:

[lang=xml]<?xml version="1.0" encoding="UTF-8" ?>

<routes>
    <route name="homepage" url="index\.html" reverse-route="index.html" controller="index" action="index"/>
</routes>

Ici,
- name est le nom de la route (il est unifié dans le traitement) ;
- url est... l'URL a appeler pour accéder au contrôleur et à l'action correspondante ;
- reverse-route est la route inversée utilisée par Zend pour l'aide de vue "url" ;
- controller, action : ça me semble évident smile .

De plus, toutes les URLs/routes inversés sont préfixées par <module>/ (site) ou par admin/<module>/ (admin), sauf si le module est "default".

En fait, mon système différencie deux types de modules : ceux directement intégrés, et des applications installées. Et les fichiers de configurations ne sont pas au même endroit selon le type de module et la section (site ou admin) :    
- - Module intégré, site : /site/module/config/routes.xml ;
- - Module intégré, admin : /admin/module/config/routes.xml ;    
- - Application, site : /components/apps/module/site/config/routes.xml ;    
- - Application, admin : /components/apps/module/admin/config/routes.xml


Mais le contrôleur appelé est systématiquement le contrôleur error, et son action du même nom, signifiant que le contrôleur n'avait pas été trouvé.

Voici les codes.

index.php

Code:

[lang=php]<?php
    
    require_once('avant.php');
    
    /* Location define */
    if(isset($_GET['u']) && preg_match('#^admin/#', $_GET['u'])) {  // we are in administration if the URL first part is "admin/".
        define('WNL_LOCATION', 'admin', true);
    }
    else {
        define('WNL_LOCATION', 'site', true);
    }
    
    /* Language define */
    if(isset($_GET['lang'])) {
        define('WNL_LANGUAGE', $_GET['lang'], true);
    }
    else {
        $set = new Wnl_Settings('Webnel', 'Webnel');
        define('WNL_LANGUAGE', $set->get('default language'), true);
    }
    
    /* Front Controller */
    $front = Zend_Controller_Front::getInstance();
    $ctrl_directories = NULL;
    
    // Names of controllers reserved for Webnel
    $reserved_names_site = array('default', 'user', 'flux', 'tests');
    $reserved_names_admin = array('default', 'webnel', 'gestion', 'appearance', 'page-style', 'contents', 'medias', 'components', 'apps', 'widgets', 'addons', 'languages', 'users', 'system', 'statistics', 'contact', 'help');
    
    // Controllers set
    if(WNL_LOCATION == 'site') {
        foreach($reserved_names_site AS $dir) {
            $ctrl_directories[$dir] = 'site/' . $dir . '/controllers';
        }
    }
    else {
        foreach($reserved_names_admin AS $dir) {
            $ctrl_directories[$dir] = 'admin/' . $dir . '/controllers';
        }
    }
    
    $front->setControllerDirectory($ctrl_directories);
    
    
    // Routes set
    $router = $front->getRouter();
    
    Wnl_Cache_Manager::updateRoutes();
    
    $routes = Wnl_Cache::get('webnel_routes');
    
    printr($routes); // Débug (1)
    echo '-----';    // Débug
    foreach($routes AS $routesOfSection) {
        foreach($routesOfSection AS $name => $values) {
            foreach($values AS $name => $value) {
                if(!empty($value['url'])) {
                    $regex_route = new Zend_Controller_Router_Route_Regex(
                        $value['url'],
                        $value['defaults'],
                        $value['keys'],
                        $value['reverse_route']
                    );
                    $router->addRoute($name, $regex_route);
                }
            }
        }
    }
    
    printr($router->getRoutes());   // Débug (2)
    
    // Parsed URI set
    $url = isset($_GET['u']) && !empty($_GET['u']) ? $_GET['u'] : 'index.html';
    $request = new Zend_Controller_Request_Http(BASE_URI . $url);
    $front->setRequest($request);
    
    try {
        $front->dispatch();
    }
    catch(Zend_Controller_Dispatcher_Exception $e) {
        echo '<h1>Controller not found.</h1>';
        echo '<p>Message number ' . $e->getCode() . ' : ' . $e->getMessage() . '</p>';
        echo '<p>URL : ' . $url . '</p>';
        $request = $front->getRequest();
        echo '<p>Controller : ' . $request->getControllerName() . '</p>';
        echo '<p>Action : ' . $request->getActionName() . '</p>';
    }
?>

Voici ce que rend les codes de débogages (commentaires Débug (x)) :
- Premier code de débogage :

Code:

Array
(
    [site] => Array
        (
            [0] => Array
                (
                    [default-homepage-47492] => Array
                        (
                            [url]=> index\.html
                            [defaults] => Array
                                (
                                    [controller] => index
                                    [action] => index
                                )

                            [keys] => Array
                                (
                                )

                            [reverse_route] => index.html
                        )

                )

            [1] => Array
                (
                )

            [2] => Array
                (
                )

            [3] => Array
                (
                    [tests-test-11135] => Array
                        (
                            [url]=> tests/test-(\d+)-(.+)\.html
                            [defaults] => Array
                                (
                                    [0] => 1
                                    [controller] => tests
                                    [action] => index
                                )

                            [keys] => Array
                                (
                                    [1] => id
                                    [2] => description
                                )

                            [reverse_route] => tests/test-%d-%s.html
                        )

                )

            [4] => Array
                (
                )

            [5] => Array
                (
                )

        )

    [admin] => Array
        (
            [0] => Array
                (
                    [default-test-84181] => Array
                        (
                            [url]=> test-(\d+)-(.+)\.html
                            [defaults] => Array
                                (
                                    [0] => 0
                                    [controller] => tests
                                    [action] => index
                                )

                            [keys] => Array
                                (
                                    [1] => id
                                    [2] => description
                                )

                            [reverse_route] => test-%d-%s.html
                        )

                )

            [1] => Array
                (
                    [webnel-test-5918] => Array
                        (
                            [url]=> webnel/test-(\d+)-(.+)\.html
                            [defaults] => Array
                                (
                                    [0] => 0
                                    [controller] => tests
                                    [action] => index
                                )

                            [keys] => Array
                                (
                                    [1] => id
                                    [2] => description
                                )

                            [reverse_route] => webnel/test-%d-%s.html
                        )

                )

            [2] => Array
                (
                    [gestion-test-41690] => Array
                        (
                            [url]=> gestion/test-(\d+)-(.+)\.html
                            [defaults] => Array
                                (
                                    [0] => 0
                                    [controller] => tests
                                    [action] => index
                                )

                            [keys] => Array
                                (
                                    [1] => id
                                    [2] => description
                                )

                            [reverse_route] => gestion/test-%d-%s.html
                        )

                )

            [3] => Array
                (
                    [appearance-test-16325] => Array
                        (
                            [url]=> appearance/test-(\d+)-(.+)\.html
                            [defaults] => Array
                                (
                                    [0] => 0
                                    [controller] => tests
                                    [action] => index
                                )

                            [keys] => Array
                                (
                                    [1] => id
                                    [2] => description
                                )

                            [reverse_route] => appearance/test-%d-%s.html
                        )

                )

            [4] => Array
                (
                    [page-style-test-40034] => Array
                        (
                            [url]=> page-style/test-(\d+)-(.+)\.html
                            [defaults] => Array
                                (
                                    [0] => 0
                                    [controller] => tests
                                    [action] => index
                                )

                            [keys] => Array
                                (
                                    [1] => id
                                    [2] => description
                                )

                            [reverse_route] => page-style/test-%d-%s.html
                        )

                )

            [5] => Array
                (
                    [contents-test-67206] => Array
                        (
                            [url]=> contents/test-(\d+)-(.+)\.html
                            [defaults] => Array
                                (
                                    [0] => 0
                                    [controller] => tests
                                    [action] => index
                                )

                            [keys] => Array
                                (
                                    [1] => id
                                    [2] => description
                                )

                            [reverse_route] => contents/test-%d-%s.html
                        )

                )

            [6] => Array
                (
                    [medias-test-87932] => Array
                        (
                            [url]=> medias/test-(\d+)-(.+)\.html
                            [defaults] => Array
                                (
                                    [0] => 0
                                    [controller] => tests
                                    [action] => index
                                )

                            [keys] => Array
                                (
                                    [1] => id
                                    [2] => description
                                )

                            [reverse_route] => medias/test-%d-%s.html
                        )

                )

            [7] => Array
                (
                    [components-test-17248] => Array
                        (
                            [url]=> components/test-(\d+)-(.+)\.html
                            [defaults] => Array
                                (
                                    [0] => 0
                                    [controller] => tests
                                    [action] => index
                                )

                            [keys] => Array
                                (
                                    [1] => id
                                    [2] => description
                                )

                            [reverse_route] => components/test-%d-%s.html
                        )

                )

            [8] => Array
                (
                    [apps-test-13839] => Array
                        (
                            [url]=> apps/test-(\d+)-(.+)\.html
                            [defaults] => Array
                                (
                                    [0] => 0
                                    [controller] => tests
                                    [action] => index
                                )

                            [keys] => Array
                                (
                                    [1] => id
                                    [2] => description
                                )

                            [reverse_route] => apps/test-%d-%s.html
                        )

                )

            [9] => Array
                (
                    [widgets-test-41880] => Array
                        (
                            [url]=> widgets/test-(\d+)-(.+)\.html
                            [defaults] => Array
                                (
                                    [0] => 0
                                    [controller] => tests
                                    [action] => index
                                )

                            [keys] => Array
                                (
                                    [1] => id
                                    [2] => description
                                )

                            [reverse_route] => widgets/test-%d-%s.html
                        )

                )

            [10] => Array
                (
                    [addons-test-14062] => Array
                        (
                            [url]=> addons/test-(\d+)-(.+)\.html
                            [defaults] => Array
                                (
                                    [0] => 0
                                    [controller] => tests
                                    [action] => index
                                )

                            [keys] => Array
                                (
                                    [1] => id
                                    [2] => description
                                )

                            [reverse_route] => addons/test-%d-%s.html
                        )

                )

            [11] => Array
                (
                    [languages-test-39147] => Array
                        (
                            [url]=> languages/test-(\d+)-(.+)\.html
                            [defaults] => Array
                                (
                                    [0] => 0
                                    [controller] => tests
                                    [action] => index
                                )

                            [keys] => Array
                                (
                                    [1] => id
                                    [2] => description
                                )

                            [reverse_route] => languages/test-%d-%s.html
                        )

                )

            [12] => Array
                (
                    [users-test-13528] => Array
                        (
                            [url]=> users/test-(\d+)-(.+)\.html
                            [defaults] => Array
                                (
                                    [0] => 0
                                    [controller] => tests
                                    [action] => index
                                )

                            [keys] => Array
                                (
                                    [1] => id
                                    [2] => description
                                )

                            [reverse_route] => users/test-%d-%s.html
                        )

                )

            [13] => Array
                (
                    [system-test-32720] => Array
                        (
                            [url]=> system/test-(\d+)-(.+)\.html
                            [defaults] => Array
                                (
                                    [0] => 0
                                    [controller] => tests
                                    [action] => index
                                )

                            [keys] => Array
                                (
                                    [1] => id
                                    [2] => description
                                )

                            [reverse_route] => system/test-%d-%s.html
                        )

                )

            [14] => Array
                (
                    [statistics-test-28906] => Array
                        (
                            [url]=> statistics/test-(\d+)-(.+)\.html
                            [defaults] => Array
                                (
                                    [0] => 0
                                    [controller] => tests
                                    [action] => index
                                )

                            [keys] => Array
                                (
                                    [1] => id
                                    [2] => description
                                )

                            [reverse_route] => statistics/test-%d-%s.html
                        )

                )

            [15] => Array
                (
                    [contact-test-14886] => Array
                        (
                            [url]=> contact/test-(\d+)-(.+)\.html
                            [defaults] => Array
                                (
                                    [0] => 0
                                    [controller] => tests
                                    [action] => index
                                )

                            [keys] => Array
                                (
                                    [1] => id
                                    [2] => description
                                )

                            [reverse_route] => contact/test-%d-%s.html
                        )

                )

            [16] => Array
                (
                    [help-test-87835] => Array
                        (
                            [url]=> help/test-(\d+)-(.+)\.html
                            [defaults] => Array
                                (
                                    [0] => 0
                                    [controller] => tests
                                    [action] => index
                                )

                            [keys] => Array
                                (
                                    [1] => id
                                    [2] => description
                                )

                            [reverse_route] => help/test-%d-%s.html
                        )

                )

        )

)

- Second code de débogage :

Code:

Array
(
    [default-homepage-47492] => Zend_Controller_Router_Route_Regex Object
        (
            [_regex:protected] => index\.html
            [_defaults:protected] => Array
                (
                    [controller] => index
                    [action] => index
                )

            [_reverse:protected] => index.html
            [_map:protected] => Array
                (
                )

            [_values:protected] => Array
                (
                )

            [_isAbstract:protected] => 
            [_matchedPath:protected] => 
        )

    [tests-test-11135] => Zend_Controller_Router_Route_Regex Object
        (
            [_regex:protected] => tests/test-(\d+)-(.+)\.html
            [_defaults:protected] => Array
                (
                    [0] => 1
                    [controller] => tests
                    [action] => index
                )

            [_reverse:protected] => tests/test-%d-%s.html
            [_map:protected] => Array
                (
                    [1] => id
                    [2] => description
                )

            [_values:protected] => Array
                (
                )

            [_isAbstract:protected] => 
            [_matchedPath:protected] => 
        )

    [default-test-84181] => Zend_Controller_Router_Route_Regex Object
        (
            [_regex:protected] => test-(\d+)-(.+)\.html
            [_defaults:protected] => Array
                (
                    [0] => 0
                    [controller] => tests
                    [action] => index
                )

            [_reverse:protected] => test-%d-%s.html
            [_map:protected] => Array
                (
                    [1] => id
                    [2] => description
                )

            [_values:protected] => Array
                (
                )

            [_isAbstract:protected] => 
            [_matchedPath:protected] => 
        )

    [webnel-test-5918] => Zend_Controller_Router_Route_Regex Object
        (
            [_regex:protected] => webnel/test-(\d+)-(.+)\.html
            [_defaults:protected] => Array
                (
                    [0] => 0
                    [controller] => tests
                    [action] => index
                )

            [_reverse:protected] => webnel/test-%d-%s.html
            [_map:protected] => Array
                (
                    [1] => id
                    [2] => description
                )

            [_values:protected] => Array
                (
                )

            [_isAbstract:protected] => 
            [_matchedPath:protected] => 
        )

    [gestion-test-41690] => Zend_Controller_Router_Route_Regex Object
        (
            [_regex:protected] => gestion/test-(\d+)-(.+)\.html
            [_defaults:protected] => Array
                (
                    [0] => 0
                    [controller] => tests
                    [action] => index
                )

            [_reverse:protected] => gestion/test-%d-%s.html
            [_map:protected] => Array
                (
                    [1] => id
                    [2] => description
                )

            [_values:protected] => Array
                (
                )

            [_isAbstract:protected] => 
            [_matchedPath:protected] => 
        )

    [appearance-test-16325] => Zend_Controller_Router_Route_Regex Object
        (
            [_regex:protected] => appearance/test-(\d+)-(.+)\.html
            [_defaults:protected] => Array
                (
                    [0] => 0
                    [controller] => tests
                    [action] => index
                )

            [_reverse:protected] => appearance/test-%d-%s.html
            [_map:protected] => Array
                (
                    [1] => id
                    [2] => description
                )

            [_values:protected] => Array
                (
                )

            [_isAbstract:protected] => 
            [_matchedPath:protected] => 
        )

    [page-style-test-40034] => Zend_Controller_Router_Route_Regex Object
        (
            [_regex:protected] => page-style/test-(\d+)-(.+)\.html
            [_defaults:protected] => Array
                (
                    [0] => 0
                    [controller] => tests
                    [action] => index
                )

            [_reverse:protected] => page-style/test-%d-%s.html
            [_map:protected] => Array
                (
                    [1] => id
                    [2] => description
                )

            [_values:protected] => Array
                (
                )

            [_isAbstract:protected] => 
            [_matchedPath:protected] => 
        )

    [contents-test-67206] => Zend_Controller_Router_Route_Regex Object
        (
            [_regex:protected] => contents/test-(\d+)-(.+)\.html
            [_defaults:protected] => Array
                (
                    [0] => 0
                    [controller] => tests
                    [action] => index
                )

            [_reverse:protected] => contents/test-%d-%s.html
            [_map:protected] => Array
                (
                    [1] => id
                    [2] => description
                )

            [_values:protected] => Array
                (
                )

            [_isAbstract:protected] => 
            [_matchedPath:protected] => 
        )

    [medias-test-87932] => Zend_Controller_Router_Route_Regex Object
        (
            [_regex:protected] => medias/test-(\d+)-(.+)\.html
            [_defaults:protected] => Array
                (
                    [0] => 0
                    [controller] => tests
                    [action] => index
                )

            [_reverse:protected] => medias/test-%d-%s.html
            [_map:protected] => Array
                (
                    [1] => id
                    [2] => description
                )

            [_values:protected] => Array
                (
                )

            [_isAbstract:protected] => 
            [_matchedPath:protected] => 
        )

    [components-test-17248] => Zend_Controller_Router_Route_Regex Object
        (
            [_regex:protected] => components/test-(\d+)-(.+)\.html
            [_defaults:protected] => Array
                (
                    [0] => 0
                    [controller] => tests
                    [action] => index
                )

            [_reverse:protected] => components/test-%d-%s.html
            [_map:protected] => Array
                (
                    [1] => id
                    [2] => description
                )

            [_values:protected] => Array
                (
                )

            [_isAbstract:protected] => 
            [_matchedPath:protected] => 
        )

    [apps-test-13839] => Zend_Controller_Router_Route_Regex Object
        (
            [_regex:protected] => apps/test-(\d+)-(.+)\.html
            [_defaults:protected] => Array
                (
                    [0] => 0
                    [controller] => tests
                    [action] => index
                )

            [_reverse:protected] => apps/test-%d-%s.html
            [_map:protected] => Array
                (
                    [1] => id
                    [2] => description
                )

            [_values:protected] => Array
                (
                )

            [_isAbstract:protected] => 
            [_matchedPath:protected] => 
        )

    [widgets-test-41880] => Zend_Controller_Router_Route_Regex Object
        (
            [_regex:protected] => widgets/test-(\d+)-(.+)\.html
            [_defaults:protected] => Array
                (
                    [0] => 0
                    [controller] => tests
                    [action] => index
                )

            [_reverse:protected] => widgets/test-%d-%s.html
            [_map:protected] => Array
                (
                    [1] => id
                    [2] => description
                )

            [_values:protected] => Array
                (
                )

            [_isAbstract:protected] => 
            [_matchedPath:protected] => 
        )

    [addons-test-14062] => Zend_Controller_Router_Route_Regex Object
        (
            [_regex:protected] => addons/test-(\d+)-(.+)\.html
            [_defaults:protected] => Array
                (
                    [0] => 0
                    [controller] => tests
                    [action] => index
                )

            [_reverse:protected] => addons/test-%d-%s.html
            [_map:protected] => Array
                (
                    [1] => id
                    [2] => description
                )

            [_values:protected] => Array
                (
                )

            [_isAbstract:protected] => 
            [_matchedPath:protected] => 
        )

    [languages-test-39147] => Zend_Controller_Router_Route_Regex Object
        (
            [_regex:protected] => languages/test-(\d+)-(.+)\.html
            [_defaults:protected] => Array
                (
                    [0] => 0
                    [controller] => tests
                    [action] => index
                )

            [_reverse:protected] => languages/test-%d-%s.html
            [_map:protected] => Array
                (
                    [1] => id
                    [2] => description
                )

            [_values:protected] => Array
                (
                )

            [_isAbstract:protected] => 
            [_matchedPath:protected] => 
        )

    [users-test-13528] => Zend_Controller_Router_Route_Regex Object
        (
            [_regex:protected] => users/test-(\d+)-(.+)\.html
            [_defaults:protected] => Array
                (
                    [0] => 0
                    [controller] => tests
                    [action] => index
                )

            [_reverse:protected] => users/test-%d-%s.html
            [_map:protected] => Array
                (
                    [1] => id
                    [2] => description
                )

            [_values:protected] => Array
                (
                )

            [_isAbstract:protected] => 
            [_matchedPath:protected] => 
        )

    [system-test-32720] => Zend_Controller_Router_Route_Regex Object
        (
            [_regex:protected] => system/test-(\d+)-(.+)\.html
            [_defaults:protected] => Array
                (
                    [0] => 0
                    [controller] => tests
                    [action] => index
                )

            [_reverse:protected] => system/test-%d-%s.html
            [_map:protected] => Array
                (
                    [1] => id
                    [2] => description
                )

            [_values:protected] => Array
                (
                )

            [_isAbstract:protected] => 
            [_matchedPath:protected] => 
        )

    [statistics-test-28906] => Zend_Controller_Router_Route_Regex Object
        (
            [_regex:protected] => statistics/test-(\d+)-(.+)\.html
            [_defaults:protected] => Array
                (
                    [0] => 0
                    [controller] => tests
                    [action] => index
                )

            [_reverse:protected] => statistics/test-%d-%s.html
            [_map:protected] => Array
                (
                    [1] => id
                    [2] => description
                )

            [_values:protected] => Array
                (
                )

            [_isAbstract:protected] => 
            [_matchedPath:protected] => 
        )

    [contact-test-14886] => Zend_Controller_Router_Route_Regex Object
        (
            [_regex:protected] => contact/test-(\d+)-(.+)\.html
            [_defaults:protected] => Array
                (
                    [0] => 0
                    [controller] => tests
                    [action] => index
                )

            [_reverse:protected] => contact/test-%d-%s.html
            [_map:protected] => Array
                (
                    [1] => id
                    [2] => description
                )

            [_values:protected] => Array
                (
                )

            [_isAbstract:protected] => 
            [_matchedPath:protected] => 
        )

    [help-test-87835] => Zend_Controller_Router_Route_Regex Object
        (
            [_regex:protected] => help/test-(\d+)-(.+)\.html
            [_defaults:protected] => Array
                (
                    [0] => 0
                    [controller] => tests
                    [action] => index
                )

            [_reverse:protected] => help/test-%d-%s.html
            [_map:protected] => Array
                (
                    [1] => id
                    [2] => description
                )

            [_values:protected] => Array
                (
                )

            [_isAbstract:protected] => 
            [_matchedPath:protected] => 
        )

)

Bout de la classe Wnl_Cache_Manager

Code:

[lang=php]<?php
    class Wnl_Cache_Manager {
        /** This class update the frequently updated cache elements.
          * @author Amaury Carrade.
          * @version 1
          * @category Cache Management
          * @subpackage Webnel Library
          * @package Webnel
          **/
        
        
        
        /** Update of routes.
          * @param bool $force = false : If true, the cache will be updated in all cases ; else, only if it has expired.
          * @return void.
          **/
        
        static public function updateRoutes($force = false) {
            $routes = NULL;
            
            if(!$routes = Wnl_Cache::get('routes') || $force) { // We have to generate routes.
                
                $routesToCache = array();
                $routesToCache['site'] = array();
                $routesToCache['admin'] = array();
                
                // Names of controllers reserved for Webnel
                $reserved_names_site = array('default', 'user', 'flux', 'tests');
                $reserved_names_admin = array('default', 'webnel', 'gestion', 'appearance', 'page-style', 'contents', 'medias', 'components', 'apps', 'widgets', 'addons', 'languages', 'users', 'system', 'statistics', 'contact', 'help');
                
                // Update application' cache
                self::updateApps();
                $apps = Wnl_Cache::get('webnel_apps');
                
                
                /*****  ROUTES FOR SITE  *****/ 
                $modules = $reserved_names_site;
                
                /** Standards modules **/
                foreach($modules AS $module) {
                    $file = 'site/' . $module . '/config/routes.xml';
                    array_push($routesToCache['site'], self::getInfosRoutesConfig($file, $module));   
                }
                
                /** Applications **/
                foreach ($apps AS $app) {
                    $file = 'components/apps/' . $app['app_code'] . '/site/config/routes.xml';
                    array_push($routesToCache['site'], self::getInfosRoutesConfig($file, $app)); 
                }
                
                /*****  ROUTES FOR ADMINISTRATION  *****/
                $modules = $reserved_names_admin;
                
                /** Standards modules **/
                foreach($modules AS $module) {
                    $file = 'admin/' . $module . '/config/routes.xml';
                    array_push($routesToCache['admin'], self::getInfosRoutesConfig($file, $module));
                }
                
                /** Applications **/
                foreach ($apps AS $app) {
                    $file = 'components/apps/' . $app['app_code'] . '/admin/config/routes.xml';
                    array_push($routesToCache['site'], self::getInfosRoutesConfig($file, $app)); 
                }
                
                
                /*** Update of cache ***/
                Wnl_Cache::set('webnel_routes', $routesToCache);
            }
        }
        
        static protected function getInfosRoutesConfig($xml, $module) {
            $routes = array();
            $dom = new DOMDocument();
            $dom->load($xml);
            
            foreach ($dom->getElementsByTagName('route') as $route) {
                $url = $route->getAttribute('url');                       // Called URL to access the controller
                $reverse_route = $route->getAttribute('reverse-route');   // The reversed route (@see http://bit.ly/cmTulz). This reversed path is represented by a string parsable by sprintf()
                $controller = $route->getAttribute('controller');         // The controller to called
                $action = $route->getAttribute('action');                 // The action to called
                $vars = $route->getAttribute('vars');                     // The vars (format : var1=defValueForVar1,var2=defValueForVar2) to send to controller
                $name = $route->getAttribute('name');                     // The name of the route.
                                                                          // Notice : All parameters are required.
                
                $url = ($module != 'default') ? $module . '/' . $url : $url;
                $reverse_route = ($module != 'default') ? $module . '/' . $reverse_route : $reverse_route;
                
                $name = $module . '-' . $name . '-' . mt_rand(0, 100000);                              // The name must be unique.
                
                $defaults = array();
                $keys = array();
                
                if(!(empty($vars))) {
                    $vars = explode(',', $vars);
                    $i = 1;
                    foreach($vars AS $var) {
                        // Check for defaults values
                        $var2 = explode('=', $var);
                        
                        if($var != $var2[0]) {  // If this var has a default value
                            $defaults[] = $var2[1];
                        }
                        
                        // Generate array of keys for view
                        $keys[$i] = $var2[0];  // In all cases, $var2[0] containt the var name.
                        
                        $i++;
                    }
                }
                
                $defaults['controller'] = $controller;
                $defaults['action'] = $action;
                
                $routes[$name] = array('url' => $url,
                         'defaults' => $defaults,
                         'keys' => $keys,
                         'reverse_route' => $reverse_route
                         );
            }
            
            
            return $routes;
        }

            // [...]
    }
?>

Le contrôleur qui devrai être appelé lors de l'appel avec l'URL index.php?u=index.html

Code:

[lang=php]<?php
    class IndexController extends Zend_Controller_Action
    {
        public function indexAction()
        {
            $this->render();
            echo '<h1>It work!</h1>';
        }
    }
?>

** Second problème : Cache

J'utilise la mise en cache pour ne pas rechercher toutes les routes à chaque fois. Mais j'ai constaté que le cache était malgré tout mis à jour systématiquement. J'utilise Zend_Cache pour le gérer, plus une légère surcouche.
J'aimerai donc savoir pourquoi ce cache est systématiquement mis à jour, alors qu'il devrai l'être toutes les heures seulement.


Voici le code le ma classe Wnl_Cache :

Code:

[lang=php]<?php
    class Wnl_Cache {
        protected static $cache = NULL;
        protected static $lifetime = 3600;
        protected static $cacheDir = NULL;
        
        /**
         * This function init the cache manager.
         * @param void.
         * @return void.
         */
        protected static function init() {
            
            if(self::$cache == NULL) {
                
                // Cache dir' settings
                self::$cacheDir = ROOT_PATH . '/tmp/cache';
                
                // FrontEnd' settings
                $frontendOptions = array(
                    'lifetime' => self::$lifetime,
                    'automatic_serialization' => true
                );
                
                // BackEnd' settings
                $backendOptions = array(
                    'cache_dir' => self::$cacheDir
                );
                
                // Cache init
                // If we can use APC, we use it.
                if(extension_loaded('APC')) {
                    self::$cache = Zend_Cache::factory(
                        'Core',
                        'APC',
                        $frontendOptions,
                        $backendOptions
                    );
                }
                // Else, we use files.
                else {
                    self::$cache = Zend_Cache::factory(
                        'Core',
                        'File',
                        $frontendOptions,
                        $backendOptions
                    );
                }
            }
        }
        
        /**
         * This function set a value of the cache.
         * @param string $cache The cache concerned.
         * @param mixed $value The value to set.
         * @param int $lifetime A specific lifetime for the cache. If "false", The default lifeting is used. Default value: false.
         * @return void.
         */
        public static function set($cache, $valeur, $lifetime = false) {
            self::init();
            self::$cache->save($valeur, $cache, array(), $lifetime);
        }
        
        /**
         * This function return the value of a cache.
         * @param string $cache The cache we will read the value.
         * @return mixed The value of the cache.
         */
        public static function get($cache) {
            self::init();
            return self::$cache->load($cache);
        }
        
        /**
         * This function empty the cache, or all the cache or only one cache.
         * @param string $cache The cache to clear. If empty, all the cache is cleared. Default value: NULL.
         * @return void.
         */
        public static function clear($cache = NULL) {
            self::init();
            if($cache != NULL) {
                self::$cache->remove($cache);
            }
            else {
                self::$cache->clean(Zend_Cache::CLEANING_MODE_ALL);
            }
        }
        
        /**
         * This function return the Zend_Cache' object.
         * @return object The Zend_Cache' object.
         */
        public static function getObject() {
            return self::$cache;
        }
        
        /**
         * This function return an array with all the cache' items saved.
         * @return array All the cache' items. Format of array : 
         *      'key (string)' => 'value (mixed)'
         */
        public static function getItems() {
            self::init();
            $items = self::$cache->getIds();
            $a_items = array();
            foreach($items AS $item) {
                $a_items[$item] = self::$cache->load($item);
            }
            return $a_items;
        }
    }
?>

Je crois que j'ai tout donné smile .
Merci d'avance !

Note : Message original sur le SdZ.

Dernière modification par J-C Bubbendorf (07-04-2011 20:09:30)

Hors ligne

 

#2 08-04-2011 22:38:57

J-C Bubbendorf
Nouveau membre
Date d'inscription: 07-04-2011
Messages: 5

Re: [Zend_Controller_Front][Latest] Erreur 404 tout le temps...

Remontée du sujet...

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages