drips / 路由
PHP-Routing-System zur Verknüpfung von URLs mit Funktionen - Ideal für APIs (Web-Services) bzw. schöne (benutzerdefinierte) URLs.
Requires
- php: >=5.4
- drips/http: ^1.0
- drips/utils: ^1.0
Suggests
- drips/mvc: Ermöglicht Routing mittels MVC-System von Drips
This package is not auto-updated.
Last update: 2024-09-14 19:25:32 UTC
README
描述
路由负责触发与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/urlURL时,将执行指定的函数,并显示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/ 后面的信息都被作为参数传递。