1
+ <?php declare (strict_types=1 );
2
+
3
+
4
+ namespace App \Http \Controller ;
5
+
6
+ use Swoft \Http \Message \Request ;
7
+ use Swoft \Http \Server \Annotation \Mapping \Controller ;
8
+ use Swoft \Http \Server \Annotation \Mapping \RequestMapping ;
9
+ use Swoft \Limiter \Annotation \Mapping \RateLimiter ;
10
+
11
+ /**
12
+ * Class LimiterController
13
+ *
14
+ * @since 2.0
15
+ *
16
+ * @Controller(prefix="limiter")
17
+ */
18
+ class LimiterController
19
+ {
20
+ /**
21
+ * @RequestMapping()
22
+ * @RateLimiter(key="request.getUriPath()")
23
+ *
24
+ * @param Request $request
25
+ *
26
+ * @return array
27
+ */
28
+ public function requestLimiter (Request $ request ): array
29
+ {
30
+ $ uri = $ request ->getUriPath ();
31
+ return ['requestLimiter ' , $ uri ];
32
+ }
33
+
34
+ /**
35
+ * @RequestMapping()
36
+ * @RateLimiter(rate=20, fallback="limiterFallback")
37
+ *
38
+ * @param Request $request
39
+ *
40
+ * @return array
41
+ */
42
+ public function requestLimiter2 (Request $ request ): array
43
+ {
44
+ $ uri = $ request ->getUriPath ();
45
+ return ['requestLimiter2 ' , $ uri ];
46
+ }
47
+
48
+ /**
49
+ * @RequestMapping()
50
+ * @RateLimiter(key="request.getUriPath()~':'~request.query('id')")
51
+ *
52
+ * @param Request $request
53
+ *
54
+ * @return array
55
+ */
56
+ public function paramLimiter (Request $ request ): array
57
+ {
58
+ $ id = $ request ->query ('id ' );
59
+ return ['paramLimiter ' , $ id ];
60
+ }
61
+
62
+ /**
63
+ * @param Request $request
64
+ *
65
+ * @return array
66
+ */
67
+ public function limiterFallback (Request $ request ): array
68
+ {
69
+ $ uri = $ request ->getUriPath ();
70
+ return ['limiterFallback ' , $ uri ];
71
+ }
72
+ }
0 commit comments