drips/路由

PHP-Routing-System zur Verknüpfung von URLs mit Funktionen - Ideal für APIs (Web-Services) bzw. schöne (benutzerdefinierte) URLs.

v1.0.0 2016-07-30 14:48 UTC

This package is not auto-updated.

Last update: 2024-09-14 19:25:32 UTC


README

Build Status Code Climate Test Coverage Latest Release

描述

路由负责触发与PHP函数关联的URL。因此,可以手动设置(美丽的)URL。

安装

Apache 2

只需在相应目录中添加一个.htaccess文件

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php [QSA]
</IfModule>

为此,必须启用Web服务器的Rewrite-Modul(mod_rewrite)。

NGINX

基本上,必须将所有请求重定向到index.php。为此,可以使用以下配置

location / {
    if (!-e $request_filename) {
        rewrite ^(.*)$ /index.php;
    }
}

使用

创建路由器

首先,必须加载和创建路由器。

<?php
use Drips\Routing\Router;

$router = Router::getInstance();

添加路由

创建相应的路由后,可以为此路由注册。

<?php
$router->add("name_der_route", "/my/url", function(){
    echo "Hello World!";
});

当调用/my/url URL时,将执行指定的函数,并显示Hello World!

注意:路由器名称必须唯一。如果名称已被占用,则无法添加路由。

MVC支持

路由系统还支持使用Drips-MVC系统。因此,在添加路由时,不仅可以传递一个函数,还可以传递一个控制器。

$router->add("name_der_route", "/my/url", MyController::class);

带占位符的路由

通常,路由是动态的。因此,路由也可以带有占位符。占位符的写法如下:{占位符名称}。所有参数都对应于各自的占位符。(参数的顺序必须遵守!)

<?php
$router->add("name_der_route", "/my/url/{name}", function($name){
    echo "Hello $name!";
});

此外,还可以使用正则表达式限制占位符。

<?php
$router->add("name_der_route", "/my/url/{name}", function($name){
    echo "Hello $name!";
}, array(
    "pattern" => array(
        "name" => "([A-Za-z]+)"
    );
));

限制路由

路由可以多次限制

  • 特定域名
  • 仅适用于HTTPS连接
  • 特定动词(请求方法)... GET、POST、DELETE、PUT

要设置限制,在添加路由时必须指定另一个参数。这是一个数组,包含所有所需的限制。

<?php
$router->add("name_der_route", "/my/url", function(){
    echo "Hello World!";
}, array(
    "https" => true,
    "verb" => ["POST", "GET"],
    "domain" => ["example.com", "example.at"]
));

启动路由

当路由器创建并注册了所有路由后,就可以开始路由过程了。这是完全自动的 - 只需调用处理路由的功能即可。

<?php
$router->route();

查询路由

getRoutes()方法返回所有已注册的路由。使用hasRoutes()函数可以检查是否已注册路由。

<?php
if($router->hasRoutes()){
	// Es sind bereits Routen registriert
} else {
	// Es sind noch keine Routen registriert
}
<?php
$routes = $router->getRoutes(); // returns array

页面未找到 - 错误404

如果没有找到相应的路由,将抛出Error404Exception异常。

<?php
try {
    $router->route();
} catch(Error404Exception $e) {
    echo "Error 404 - Die Seite wurde nicht gefunden!";
}

生成链接

为了使URL能够随时更改,并且能够从不同的目录调用,链接是通过route函数生成的。

可以这样生成链接

<?php
$url = route("testRoute");

传入路由名称。此外,对于带有占位符的路由,也可以通过简单传入参数数组来生成链接。

假设存在一个路由/users/{username}

<?php
$url = route("users", array("username" => "admin"));

资源

链接系统也适用于未在路由器中注册的“文件”。例如,如果有一个CSS文件需要在特定页面上显示,也可以为该文件生成一个绝对路径。

<?php
$url = asset("css/style.css");

重定向

有时需要转到另一个页面。这是通过 redirect 函数实现的。这个函数的基本工作原理与 routelink 方法相同,唯一的区别是它不返回链接,而是直接转到该页面。

<?php
redirect("home");

自动路由

路由定义如下:/my/url/[auto]。因此,所有跟在 /my/url/ 后面的信息都被作为参数传递。