PHP 8.4.26 Released!

Yaf_Route_Interface::route

(Yaf >=1.0.0)

Yaf_Route_Interface::route — Route une requête

Description

abstract public function Yaf_Route_Interface::route(Yaf_Request_Abstract $request): bool

Yaf_Route_Interface::route() est la seule méthode qu'une route personnalisée devrait implémenter.

Note:

À partir de la version 2.3.0, une autre méthode devrait également être implémentée, voir Yaf_Route_Interface::assemble().

Si cette méthode retourne true, alors le processus de routage se terminera. Sinon, Yaf_Router appellera la route suivante dans la pile des routes pour router la requête.

Cette méthode devrait affecter le résultat du routage au paramètre request, en appelant Yaf_Request_Abstract::setControllerName(), Yaf_Request_Abstract::setActionName() et Yaf_Request_Abstract::setModuleName().

Cette méthode devrait également appeler Yaf_Request_Abstract::setRouted() pour marquer la requête comme routée en dernier lieu.

Liste de paramètres

request

Une instance de Yaf_Request_Abstract.

Valeurs de retour

Exemples

Exemple #1 Exemple avec Yaf_Route_Interface::route()

<?php
class ApiRoute implements Yaf_Route_Interface {

    private $_prefix;

    public function __construct(string $prefix) {
        $this->_prefix = $prefix;
    }

    public function route(Yaf_Request_Abstract $request): bool {
        $uri = $request->getRequestUri();
        if (0 !== strpos($uri, $this->_prefix)) {
            /* cela ne nous concerne pas, le routeur essaiera la route suivante */
            return false;
        }

        /* analyse l'URI "/api/user/list" en contrôleur/action */
        $segments = explode("/", ltrim(substr($uri, strlen($this->_prefix)), "/"));
        $controller = isset($segments[0]) ? ucfirst($segments[0]) : NULL;
        $action = isset($segments[1]) ? $segments[1] : NULL;

        if (empty($controller)) {
            return false;
        }

        $request->setModuleName("index");
        $request->setControllerName($controller);
        $request->setActionName($action);
        $request->setRouted(); /* le processus de routage se termine ici */

        return true;
    }

    public function assemble(array $info, ?array $query = null): string {
        $uri = $this->_prefix . "/" . strtolower($info[':c']);
        if (isset($info[':a'])) {
            $uri .= "/" . $info[':a'];
        }

        if (!empty($query)) {
            $uri .= "?" . http_build_query($query);
        }

        return $uri;
    }
}

/**
 * enregistre la route personnalisée
 */
Yaf_Dispatcher::getInstance()->getRouter()->addRoute("api", new ApiRoute("/api"));
?>

Résultat de l'exemple ci-dessus est similaire à :

/* http://yourdomain.com/api/user/list
 * est routée vers les valeurs suivantes :
 */
array(
  "module"     => "index",
  "controller" => "User",
  "action"     => "list",
)

Voir aussi

+add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top