Yaf_Route_Interface::assemble

(Yaf >=2.3.0)

Yaf_Route_Interface::assembleAssemble une requête

Description

abstract public function Yaf_Route_Interface::assemble(array $info, array $query = ?): string

Cette méthode retourne une URL suivant les informations de l'argument info, et ajoute les chaînes de requête à l'URL suivant l'argument query.

Une route devrait implémenter cette méthode suivant ses propres règles de routage, et effectuer le traitement inverse.

Liste de paramètres

info

query

Valeurs de retour

Exemples

Exemple #1 Exemple avec Yaf_Route_Interface::assemble()

<?php
class RewriteRoute implements Yaf_Route_Interface {

    private $_match;
    private $_route;

    public function __construct(string $match, array $route) {
        $this->_match = $match;
        $this->_route = $route;
    }

    public function route(Yaf_Request_Abstract $request): bool {
        if (!preg_match($this->_match, $request->getRequestUri(), $matches)) {
            return false;
        }

        foreach ($this->_route as $key => $value) {
            if (is_string($value) && ':' === $value[0]) {
                $value = $matches[substr($value, 1)];
            }
            $request->setParam($key, $value);
        }
        $request->setRouted();

        return true;
    }

    /* applique les règles de routage en sens inverse pour reconstruire une URL */
    public function assemble(array $info, ?array $query = null): string {
        $url = "/product";
        if (isset($info[':name'])) {
            $url .= "/" . $info[':name'];
        }

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

        return $url;
    }
}

$router = new Yaf_Router();
$router->addRoute("custom",
    new RewriteRoute("#^/product#", array("controller" => "product"))
);

var_dump($router->getRoute("custom")->assemble(
    array(':name' => 'book'),
    array('page' => 2)
));
?>

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

string(20) "/product/book?page=2"

Voir aussi

add a note

User Contributed Notes

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