天箭座X/白鲸路由

简单的URL路由库。

0.1.1 2016-08-08 17:38 UTC

This package is not auto-updated.

Last update: 2024-09-15 01:05:32 UTC


README

简单的URL路由库。

安装

通过composer安装它!

composer require sagittariusx/beluga.routing

或者在你的composer.json文件中包含它

{
   "require": {
      "php": ">=7.0",
      "sagittariusx/beluga.": "^0.1.1"
   }
}

准备网络服务器

为了使用路由器,你需要告诉网络服务器将请求重写到不存在的URL路径到处理PHP脚本。

你可以通过两种不同的方式完成

  • 将不存在的URL路径作为具有特定名称的GET变量传递给脚本
  • 通过$_SERVER[ 'REQUEST_URI' ](最佳选择)传递不存在的URL路径

Apache网络服务器

对于Apache来说,处理重写非常简单。

创建一个名为.htaccess的文件,并将其放置在需要重写的地方的文件夹中。

但记住!

.htaccess(分布式配置文件)仅应在没有访问服务器配置文件的情况下使用。

.htaccess的使用会带来一些开销,这些开销是可以避免的。

但是,如果你承认一个服务器,就没有必要再展示了。你知道的 :-)

此文件的内容取决于应使用的路由器类型。

作为GET变量(RouterType::REWRITE_TO_GET)

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?theURL=$1 [QSA,L]

第一行启用重写引擎。第二行声明匹配所有不存在的文件调用条件,第三行匹配所有不存在的目录调用。

最后一行将匹配的不存在的文件和目录重写到index.php,并将调用的不存在的URL路径传递给theURL GET变量

作为'REQUEST_URI'值(RouterType::REWRITE_TO_REQUEST_URI)

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]

第一行启用重写引擎。第二行声明匹配所有不存在的文件调用条件,第三行匹配所有不存在的目录调用。

最后一行将匹配的不存在的文件和目录重写到index.php,并将调用的不存在的URL路径传递给$_SERVER[ 'REQUEST_URI' ]

错误处理

如果.htaccess的使用触发了某些服务器错误(例如,错误50*或其他),你必须检查

  • 是否启用了Apache使用.htaccess文件
  • 是否启用了Apache通过.htaccess文件进行重写(.htaccess内容的权限)
  • 是否启用了Apache使用mod_rewrite扩展

前两项可以通过确保允许覆盖指令来处理。有关详细信息,请参阅:Apache HTTP服务器教程:.htaccess文件

AllowOverride FileInfo

要检查是否已启用mod rewrite,请在您的控制台中调用此命令

sudo a2enmod rewrite

如果已经启用,它将输出:Module rewrite already enabled

如果没有启用,则启用重写模块。

如果您无法在服务器上调用控制台,请联系管理员或提供商,询问他们是否为您启用了mod rewrite。如果没有,请他们通过.htaccess启用mod rewrite的使用

NGINX网络服务器

这是一个大型的待办事项!:-)

但是,如果您使用

try_files $uri $uri/ /index.php?$args;

…它应该可以通过$_SERVER[ 'REQUEST_URI' ]index.php内部获取调用的URL路径

使用方法

// Include the autoloader, created by composer
require __DIR__ . '/vendor/autoload.php';

use Beluga\Routing\Router;
use Beluga\Routing\RouterType;

// Init the router
$router = new Router(
   // The type of the router
   RouterType::REWRITE_TO_REQUEST_URI
);

// Adds an dynamic regex URI path route
$router->addRoute(
   '~^/foo/(\d+)/bar/?$~',
   function ( array $matches )
   {
      // If you need access to current Router instance can get it by Router::GetInstance()
      echo 'ID: ', $matches[ 1 ], ' OK :-)';
      exit;
   }
);

// Adds an static URI path route
$router->addRoute(
   '~^/baz/?$~',
   function ()
   {
      // If you need access to current Router instance can get it by Router::GetInstance()
      echo 'The BAZ is called!';
      exit;
   }
);

在定义您的路由后,只需调用execute()即可执行路由。

if ( ! $router->execute() )
{
   // Showing 404 error because no router matches the defined request URI path.
}