erlendellingsen/flex-router

一个轻量级的PHP路由器,用于创建干净、RESTful的URL。设置和配置极其简单。

1.0.0-stable 2017-03-07 19:28 UTC

This package is not auto-updated.

Last update: 2024-09-26 00:32:02 UTC


README

flexRouter logo

Build Status MIT Licence

flexRouter

一个非常 轻量级 的PHP路由器,用于创建干净、RESTful的URL。设置简单,无需配置。简单的路由处理。

支持参数、不同的HTTP方法以及通配符URL。

变更记录

作为新的维护者,我试图实现一个更健壮的架构,同时不偏离路由器的初始目标,即基于if条件控制结构。

随着项目的演变,这可能在将来发生变化。以下是经过重新设计的示例,展示如何在新的、经过单元测试的形式中使用路由器。

安装

composer require erlendellingsen/flex-router

设置

目标服务器上必须启用URL重写。本指南包含如何在Apache服务器上设置它的示例。如果您有IIS、Nginx或其他示例,请考虑贡献!

Apache

配置

  • 必须启用Apache模块 mod_rewrite
  • 必需的Apache-vhost/Directory设置 AllowOverride all

.htaccess文件

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^?]*)$ index.php?path=$1 [NC,L,QSA]

非Apache

您必须以某种方式在您的Web服务器/目录中启用URL重写,以便将所有请求指向 index.php?path=x。如果您有想法但需要帮助,请不要犹豫,联系我

如果您有其他Web服务器的示例,请考虑与我联系。(打开一个问题、创建一个分支,或者直接给我发邮件)。贡献将非常受赞赏 ☺️

使用

下面的示例演示了如何设置 flexRouter

<?php

// Load the namespaces
use FlexRouter\FlexRouter;
use FlexRouter\Utilities\FlexResolver;

// Load in composer's autoloader
require_once 'vendor/autoload.php';

// Create a new router instance
$router = new FlexRouter();

/* Register your routes

Register Method        | Request Method | Route           | Route Id                           */
$router->registerRoute('GET',           '/',              'homepage'); // Can pass single method
$router->registerRoute(['GET', 'POST'], '/test',          'test');     // Or an array of methods
$router->registerRoute('GET',           '/test/:id/post', 'param');    // You can create URL params
$router->registerRoute('GET',           '/asdf*',         'wildcard'); // Or Wildcard Params

// Create your resolver
$requestMethod = $_SERVER['REQUEST_METHOD']; // Can be attained from either globals or request object
$requestUri    = $_SERVER['REQUEST_URI'];    // Can be attained from either globals or request object
$resolver      = new FlexResolver($requestMethod, $requestUri, $router);

// Start resolving your routes in whatever way you would like,
if ($resolver->resolve('homepage')) {
    echo 'The homepage route was found';

    return;
}

if ($resolver->resolve('test')) {
    echo 'The nested test route was found';

    return;
}

if ($resolver->resolve('param')) {
    echo "The param test route was found\r\n";
    echo $resolver->access()->params('url', 'id');

    return;
}

if ($resolver->resolve('wildcard')) {
    echo 'The wildcard test route was found';

    return;
}

// This is the 404 catch all
$resolver->notFound(function () {
    echo 'Nothing found';

    return;
});

贡献

想要贡献?太好了!贡献非常受赞赏。在这个项目中有很多事情可以做,但我没有时间全部完成。(至少不是全部)。

急需贡献的领域

  • 编写文档(如果需要帮助,请联系我!)
  • 制作更好的README
  • 创建测试
  • 改进异常处理
  • 更好地处理 GET/POST(支持DELETE、PUT等)。

可能还有更多。

许可证

MIT 版权所有 Erlend Ellingsen 2017。见 LICENSE