public function findRoute(\Psr\Http\Message\ServerRequestInterface &$p_request)
    {
        if ($this->routes instanceof \FreeFW\Router\RouteCollection) {
            $params     = $p_request->getServerParams();
            $currentDir = '/';
            $requestUrl = '';
            if (array_key_exists('_request', $_GET)) {
                $requestUrl = '/' . ltrim($_GET['_request'], '/');
            }
            if (($pos = strpos($requestUrl, '?')) !== false) {
                if (array_key_exists('_url', $_GET)) {
                    $requestUrl = $_GET['_url'];
                } else {
                    $requestUrl = substr($requestUrl, 0, $pos);
                }
            }
            $currentDir = rtrim($this->base_path, '/');
            $this->logger->debug('router.findRoute.request : ' . $requestUrl);
            foreach ($this->routes->getRoutes() as $idx => $oneRoute) {
                $this->logger->debug('router.findRoute.test : ' . $oneRoute->getUrl());
                if (strtoupper($p_request->getMethod()) == strtoupper($oneRoute->getMethod())) {
                    if ($currentDir != '/') {
                        $requestUrl = str_replace($currentDir, '', $requestUrl);
                    }
                    $params = array();
                    if ($oneRoute->getUrl() == $requestUrl) {
                        // Ok, pas besoin de compliquer....
                    } else {
                        // @todo : ajouter la notion obligatoire pour les paramètres
                        if (!preg_match("#^" . $oneRoute->getRegex() . "$#", $requestUrl, $matches)) {
                            continue;
                        }
                        // Ok
                        // On a trouvé une route, on récupère les paramètres.
                        // On va en profiter pour les injecter dans la requête
                        $matchedText = array_shift($matches);
                        if (preg_match_all("/:([\w-\._@%]+)/", $oneRoute->getUrl(), $argument_keys)) {
                            $argument_keys = $argument_keys[1];
                            if (count($argument_keys) != count($matches)) {
                                continue;
                            }
                            foreach ($argument_keys as $key => $name) {
                                if (isset($matches[$key]) && $matches[$key] !== null
                                    && $matches[$key] != '' && $matches[$key] != '/'
                                ) {
                                    $params[$name] = ltrim($matches[$key], '/'); // Pour les paramètres optionnel
                                } else {
                                    $params[$name] = '';
                                }
                            }
                        }
                        foreach ($params as $name => $value) {
                            $p_request = $p_request->withAttribute($name, $value);
                        }
                    }
                    $this->logger->debug('router.findRoute.match : ' . $oneRoute->getUrl());
                    return $oneRoute;
                }
            }
        }
        return false;
    }