Skip to content

Commit

Permalink
init
Browse files Browse the repository at this point in the history
  • Loading branch information
ericyzhu committed Dec 17, 2020
0 parents commit 6fd2510
Show file tree
Hide file tree
Showing 18 changed files with 607 additions and 0 deletions.
2 changes: 2 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
/tests export-ignore
/.github export-ignore
25 changes: 25 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
on:
push:
# Sequence of patterns matched against refs/tags
tags:
- 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10

name: Release

jobs:
release:
name: Release
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Create Release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref }}
release_name: Release ${{ github.ref }}
draft: false
prerelease: false
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
/vendor/
composer.lock
*.cache
*.log
.idea/
.DS_Store
91 changes: 91 additions & 0 deletions .php_cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
<?php

$header = <<<'EOF'
This file is part of hyperf-ext/http-server-router.
@link https://github.com/hyperf-ext/http-server-router
@contact [email protected]
@license https://github.com/hyperf-ext/http-server-router/blob/master/LICENSE
EOF;

return PhpCsFixer\Config::create()
->setRiskyAllowed(true)
->setRules([
'@PSR2' => true,
'@Symfony' => true,
'@DoctrineAnnotation' => true,
'@PhpCsFixer' => true,
'header_comment' => [
'commentType' => 'PHPDoc',
'header' => $header,
'separate' => 'none',
'location' => 'after_declare_strict',
],
'array_syntax' => [
'syntax' => 'short'
],
'list_syntax' => [
'syntax' => 'short'
],
'concat_space' => [
'spacing' => 'one'
],
'blank_line_before_statement' => [
'statements' => [
'declare',
],
],
'general_phpdoc_annotation_remove' => [
'annotations' => [
'author'
],
],
'ordered_imports' => [
'imports_order' => [
'class', 'function', 'const',
],
'sort_algorithm' => 'alpha',
],
'single_line_comment_style' => [
'comment_types' => [
],
],
'yoda_style' => [
'always_move_variable' => false,
'equal' => false,
'identical' => false,
],
'phpdoc_align' => [
'align' => 'left',
],
'multiline_whitespace_before_semicolons' => [
'strategy' => 'no_multi_line',
],
'constant_case' => [
'case' => 'lower',
],
'class_attributes_separation' => true,
'combine_consecutive_unsets' => true,
'declare_strict_types' => true,
'linebreak_after_opening_tag' => true,
'lowercase_static_reference' => true,
'no_useless_else' => true,
'no_unused_imports' => true,
'not_operator_with_successor_space' => true,
'not_operator_with_space' => false,
'ordered_class_elements' => true,
'php_unit_strict' => false,
'phpdoc_separation' => false,
'single_quote' => true,
'standardize_not_equals' => true,
'multiline_comment_opening_closing' => true,
])
->setFinder(
PhpCsFixer\Finder::create()
->exclude('bin')
->exclude('public')
->exclude('runtime')
->exclude('vendor')
->in(__DIR__)
)
->setUsingCache(false);
38 changes: 38 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
language: php

sudo: required

matrix:
include:
- php: 7.2
env: SW_VERSION="4.5.3RC1"
- php: 7.3
env: SW_VERSION="4.5.3RC1"
- php: 7.4
env: SW_VERSION="4.5.3RC1"

allow_failures:
- php: master

services:
- docker

before_install:
- export PHP_MAJOR="$(`phpenv which php` -r 'echo phpversion();' | cut -d '.' -f 1)"
- export PHP_MINOR="$(`phpenv which php` -r 'echo phpversion();' | cut -d '.' -f 2)"
- echo $PHP_MAJOR
- echo $PHP_MINOR

install:
- cd $TRAVIS_BUILD_DIR
- bash .travis/swoole.install.sh
- phpenv config-rm xdebug.ini || echo "xdebug not available"
- phpenv config-add .travis/ci.ini

before_script:
- cd $TRAVIS_BUILD_DIR
- composer config -g process-timeout 900 && composer update

script:
- composer analyse
- composer test
5 changes: 5 additions & 0 deletions .travis/ci.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
[opcache]
opcache.enable_cli=1

[swoole]
extension = "swoole.so"
10 changes: 10 additions & 0 deletions .travis/swoole.install.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#!/usr/bin/env bash
wget https://github.com/swoole/swoole-src/archive/v"${SW_VERSION}".tar.gz -O swoole.tar.gz
mkdir -p swoole
tar -xf swoole.tar.gz -C swoole --strip-components=1
rm swoole.tar.gz
cd swoole || exit
phpize
./configure --enable-openssl --enable-mysqlnd --enable-http2
make -j "$(nproc)"
make install
21 changes: 21 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
The MIT License (MIT)

Copyright (c) Eric Zhu

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
66 changes: 66 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
# Hyperf HTTP 服务器命名路由扩展组件

## 概要

该组件通过绑定 `HyperfExt\HttpServer\Router\DispatcherFactory``Hyperf\HttpServer\Router\DispatcherFactory` 来实现扩展路由功能,由于修改了返回类型,PHP 版本必须 >= 7.4。

## 安装

```shell
composer require hyperf-ext/http-server-router
```

## 使用

### 定义命名路由

在路由选项中定义 `name` 参数来对路由命名,支持对路由组命名。

```php
use Hyperf\HttpServer\Router\Router;

Router::addGroup('/users/{id}', function () {
Router::get('/comments', 'App\Controller\IndexController@index', ['name' => 'comments.index']); // 该路由名称将被组合为 `users.comments.index`
}, ['name' => 'users']);
```

### 获取路由对象

#### 通过路由名称获取指定路由

```php
use Hyperf\HttpServer\Router\Router;

/** @var \HyperfExt\HttpServer\Router\Route $route */
$route = Router::getNamedRoute('users.comments.index');
```

#### 通过当前请求获取当前路由

```php
use Hyperf\HttpServer\Contract\RequestInterface;
use Hyperf\HttpServer\Router\Dispatched;
use Hyperf\Utils\ApplicationContext;

/** @var \HyperfExt\HttpServer\Router\Route $route */
$route = ApplicationContext::getContainer()
->get(RequestInterface::class)
->getAttribute(Dispatched::class)
->handler
->routeInstance; // 为避免过多修改原始组件,该组件将路由实例放到了 Handler 中
```

### 生成指定路由的 URI

```php
/**
* @var \HyperfExt\HttpServer\Router\Route $route
* @var \Hyperf\HttpMessage\Uri\Uri $uri
*/
$uri = $route->createUri([
'id' => 123,
'page_num' => 2,
'page_size' => 20,
]);
$link = (string) $uri; // 结果为 `/users/123/comments?page_num=2&page_size=20`
```
53 changes: 53 additions & 0 deletions composer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
{
"name": "hyperf-ext/http-server-router",
"type": "library",
"license": "MIT",
"keywords": [
"php",
"hyperf",
"router"
],
"description": "The named router for Hyperf HTTP server package.",
"authors": [
{
"name": "Eric Zhu",
"email": "[email protected]"
}
],
"autoload": {
"psr-4": {
"HyperfExt\\HttpServer\\Router\\": "src/"
}
},
"autoload-dev": {
"psr-4": {
"HyperfTest\\HyperfExt\\HttpServer\\Router\\": "tests"
}
},
"require": {
"php": ">=7.4",
"ext-swoole": ">=4.5",
"hyperf/di": "~2.0.0",
"hyperf/framework": "~2.0.0",
"hyperf/http-server": "~2.0.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^2.14",
"hyperf/testing": "~2.0.0",
"phpstan/phpstan": "^0.12",
"swoole/ide-helper": "dev-master"
},
"config": {
"sort-packages": true
},
"scripts": {
"test": "co-phpunit -c phpunit.xml --colors=always",
"analyse": "phpstan analyse --memory-limit 1024M -l 0 ./src",
"cs-fix": "php-cs-fixer fix $1"
},
"extra": {
"hyperf": {
"config": "HyperfExt\\HttpServer\\Router\\ConfigProvider"
}
}
}
15 changes: 15 additions & 0 deletions phpunit.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit bootstrap="tests/bootstrap.php"
backupGlobals="false"
backupStaticAttributes="false"
verbose="true"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false">
<testsuite name="Testsuite">
<directory>./tests/</directory>
</testsuite>
</phpunit>
25 changes: 25 additions & 0 deletions src/ConfigProvider.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?php

declare(strict_types=1);
/**
* This file is part of hyperf-ext/http-server-router.
*
* @link https://github.com/hyperf-ext/http-server-router
* @contact [email protected]
* @license https://github.com/hyperf-ext/http-server-router/blob/master/LICENSE
*/
namespace HyperfExt\HttpServer\Router;

use Hyperf\HttpServer\Router\DispatcherFactory as HyperfDispatcherFactory;

class ConfigProvider
{
public function __invoke(): array
{
return [
'dependencies' => [
HyperfDispatcherFactory::class => DispatcherFactory::class,
],
];
}
}
Loading

0 comments on commit 6fd2510

Please sign in to comment.