dannyvankooten/php-router

此包已被废弃,不再维护。未建议替代包。

简单的PHP路由器,支持REST和反向路由。

1.2.0-alpha 2017-03-09 21:53 UTC

README

Latest Stable Version Total Downloads Latest Unstable Version License

一个简单的Rails灵感的PHP路由器类。

  • 不同HTTP方法的用法
  • REST / 资源路由
  • 使用命名路由进行反向路由
  • 动态URL:使用URL段作为参数。

作者

使用composer轻松安装

$ composer require dannyvankooten/php-router

用法

友好URL

如果你使用Apache并启用了mod_rewrite,在根目录下创建一个简单的.htaccess文件。

Options +FollowSymLinks
RewriteEngine On
RewriteRule ^(.*)$ index.php [NC,L]

如果你使用nginx,设置你的服务器部分如下

server {
	listen 80;
	server_name mydevsite.dev;
	root /var/www/mydevsite/public;

	index index.php;

	location / {
		try_files $uri $uri/ /index.php?$query_string;
	}

	location ~ \.php$ {
		fastcgi_split_path_info ^(.+\.php)(/.+)$;
		# NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

		# With php5-fpm:
		fastcgi_pass unix:/var/run/php5-fpm.sock;
		fastcgi_index index.php;
		include fastcgi.conf;
		fastcgi_intercept_errors on;
	}
}

这是路由器在实际应用中的简单示例

<?php
require __DIR__.'/vendor/autoload.php';

use PHPRouter\RouteCollection;
use PHPRouter\Router;
use PHPRouter\Route;

$collection = new RouteCollection();
$collection->attachRoute(new Route('/users/', array(
    '_controller' => 'someController::usersCreate',
    'methods' => 'GET'
)));

$collection->attachRoute(new Route('/', array(
    '_controller' => 'someController::indexAction',
    'methods' => 'GET'
)));

$router = new Router($collection);
$router->setBasePath('/PHP-Router');
$route = $router->matchCurrentRequest();

var_dump($route);

从yaml文件加载路由器

我们可以在yaml文件中定义我们应用程序的所有路由。这有助于我们迁移、修改或稍后添加新路由。

路由定义应遵循以下示例

base_path: /blog

routes:
  index: [/index, someClass.indexAction, GET]
  contact: [/contact, someClass.contactAction, GET]
  about: [/about, someClass.aboutAction, GET]

在我们的前端控制器中会有如下内容

<?php
require __DIR__.'/vendor/autoload.php';

use PHPRouter\RouteCollection;
use PHPRouter\Config;
use PHPRouter\Router;
use PHPRouter\Route;

$config = Config::loadFromFile(__DIR__.'/router.yaml');
$router = Router::parseConfig($config);
$router->matchCurrentRequest();

更多信息

如果你喜欢PHP Router,你可能也会喜欢AltoRouter

许可证

MIT许可,https://open-source.org.cn/licenses/MIT