Skip to content

Commit e59a3a4

Browse files
committed
Make restful router as default
1 parent 613e672 commit e59a3a4

File tree

7 files changed

+237
-499
lines changed

7 files changed

+237
-499
lines changed

bin/yesf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,6 @@ EOT;
114114
//初始化
115115
$app = new Yesf\Yesf();
116116
$app->setEnvConfig($config);
117-
$app->bootstrap()->run();
117+
$app->run();
118118
}
119119
}

docs/zh-CN/process_request/router.md

Lines changed: 43 additions & 114 deletions
Original file line numberDiff line numberDiff line change
@@ -5,120 +5,9 @@ lang: zh-CN
55

66
# 路由
77

8-
## 默认内置路由
8+
## 内置路由
99

10-
> 默认内置路由位于 src/Http/Router.php
11-
12-
默认内置路由支持Rewrite、Regex、Map三种方式解析URL。优先级为 Regex > Rewrite > Map。
13-
14-
### 前缀
15-
16-
URL若以此开头,则此部分不会参与解析。如:
17-
18-
```php
19-
use Yesf\Http\Router;
20-
21-
function run(Router $router) {
22-
$router->setPrefix('/user');
23-
}
24-
```
25-
26-
访问`http://example.com/user/index/user/view`时,实际参与解析的是`index/user/view`
27-
28-
默认为`/`
29-
30-
### Regex
31-
32-
以正则方式解析。
33-
34-
```php
35-
use Yesf\Http\Router;
36-
37-
function run(Router $router) {
38-
$router->addRegex('/^thread-view-([0-9]+)-([0-9]+)\\.html$/', [
39-
'module' => 'index',
40-
'controller' => 'forum',
41-
'action' => 'view'
42-
], [
43-
// 完成数字到字符变量的映射
44-
1 => 'id',
45-
2 => 'page'
46-
]);
47-
}
48-
49-
// 当访问 thread-view-123-2.html 时
50-
class Forum extends ControllerAbstract implements ControllerInterface {
51-
public function ViewAction(Request $request, Response $response) {
52-
echo $request->param['id']; // 123
53-
echo $request->param['page']; // 2
54-
}
55-
}
56-
```
57-
58-
### Rewrite
59-
60-
以简单的重写方式解析。
61-
62-
匹配的路径使用一个特别的标识来告诉路由协议如何匹配到路径中的每一个段,这个标识有有两种,可以帮助我们创建我们的路由协议:
63-
64-
* 冒号(:):包含一个变量用于传递到我们动作控制器中的变量,例如我们使用`:name`,,我们可以在动作中使用`$request->param['name']`获取到它的值。
65-
66-
* 星号(\*):一个通配符, 意思是在它后面的所有段都将作为一个通配数据被存储,例如我们使用'path/:name/*',我们访问的`/path/foo/test/value1/another/value2`,那么我们会得到下面的结果:
67-
68-
```php
69-
echo $request->param['test']; // value1
70-
echo $request->param['another']; // value2
71-
```
72-
73-
Demo:
74-
75-
```php
76-
use Yesf\Http\Router;
77-
78-
function run(Router $router) {
79-
$router->addRewrite('user/:id/feed/*', [
80-
'module' => 'index',
81-
'controller' => 'user',
82-
'action' => 'feed'
83-
]);
84-
}
85-
86-
// 当访问 user/123/feed/page/1/filter/video 时
87-
class User extends ControllerAbstract implements ControllerInterface {
88-
public function FeedAction(Request $request, Response $response) {
89-
echo $request->param['id']; // 123
90-
echo $request->param['page']; // 1
91-
echo $request->param['filter']; // video
92-
}
93-
}
94-
```
95-
96-
### Map
97-
98-
默认的解析方式,不需要特别配置。将会按`module/controller/action`的规则解析。
99-
100-
`index/user/view?id=1`会解析至Index模块、User控制器、View功能。
101-
102-
## Restful风格内置路由
103-
104-
> Restful风格内置路由位于 src/Http/RestfulRouter.php
105-
106-
### 启用
107-
108-
在Dispatcher上注册:
109-
110-
```php
111-
namespace YesfApp;
112-
113-
use Yesf\Http\RestfulRouter;
114-
use Yesf\Http\Dispatcher;
115-
116-
class Configuration {
117-
public function setRouter(Dispatcher $dispatcher, RestfulRouter $router) {
118-
$dispatcher->setRouter($router);
119-
}
120-
}
121-
```
10+
> 内置路由位于 src/Http/Router.php
12211
12312
### 前缀
12413

@@ -136,7 +25,7 @@ function run(Router $router) {
13625

13726
默认为`/`
13827

139-
### 方法
28+
### Restful风格
14029

14130
支持get、post、put、delete、head、options、connect。如:
14231

@@ -170,6 +59,46 @@ $router->get('user/{id}/{action}', function($param) {
17059
]);
17160
```
17261

62+
您也可以使用any,它的优先级是最低的:
63+
64+
```php
65+
$router->any('user/{id}', [
66+
'module' => 'index',
67+
'controller' => 'user',
68+
'action' => 'view'
69+
], [
70+
'id' => '(\d+)'
71+
]);
72+
```
73+
74+
您可以简写第二个参数:
75+
76+
```php
77+
$router->any('user/{id}', 'index.user.view');
78+
```
79+
80+
### Map
81+
82+
默认的隐式路由,不需要特别配置。将会按`module/controller/action`的规则解析。
83+
84+
`index/user/view?id=1`会解析至Index模块、User控制器、View功能。
85+
86+
您可以手动关闭它:
87+
88+
在项目配置中:
89+
90+
```php
91+
'router' => [
92+
'map' => false
93+
]
94+
```
95+
96+
或在代码中:
97+
98+
```php
99+
$router->disableMap();
100+
```
101+
173102
## 自定义路由
174103

175104
可以自定义路由,不使用内置路由。

examples/Base/application/Config/Project.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
'charset' => 'utf-8',
66
'bootstrap' => 'Bootstrap',
77
'router' => [
8+
'map' => true,
89
'extension' => true
910
],
1011
'static' => [

src/Http/RestfulRouter.php

Lines changed: 0 additions & 132 deletions
This file was deleted.

0 commit comments

Comments
 (0)