1616
1717final class Application
1818{
19+ private array $ middlewares = [
20+ AddCommandMiddleware::class,
21+ ConfigPropsMiddleware::class,
22+ CheckAllowedProps::class,
23+ LocalMiddleware::class,
24+ CliInitMiddleware::class
25+ ];
26+
1927 public function __construct ()
2028 {
2129 // Default config
@@ -29,6 +37,49 @@ public function __construct()
2937 EmitronKernel::setRouterFilePath (__DIR__ . "/ConsoleRouter.php " );
3038 }
3139
40+ /**
41+ * Clear the default middlewares, be careful with this
42+ *
43+ * @return $this
44+ */
45+ public function clearDefaultMiddleware (): self
46+ {
47+ $ inst = clone $ this ;
48+ $ inst ->middlewares = [];
49+ return $ inst ;
50+ }
51+
52+ /**
53+ * Clear the default middlewares, be careful with this
54+ *
55+ * @return $this
56+ */
57+ public function unsetMiddleware (string $ class ): self
58+ {
59+
60+ $ inst = clone $ this ;
61+ foreach ($ inst ->middlewares as $ key => $ middleware ) {
62+ if ($ middleware === $ class ) {
63+ unset($ inst ->middlewares [$ key ]);
64+ break ;
65+ }
66+ }
67+ return $ inst ;
68+ }
69+
70+ /**
71+ * Add custom middlewares, follow PSR convention
72+ *
73+ * @param array $middleware
74+ * @return $this
75+ */
76+ public function withMiddleware (array $ middleware ): self
77+ {
78+ $ inst = clone $ this ;
79+ $ inst ->middlewares = array_merge ($ inst ->middlewares , $ middleware );
80+ return $ inst ;
81+ }
82+
3283 /**
3384 * Change router file
3485 *
@@ -84,13 +135,7 @@ public function boot(array $parts): Kernel
84135 {
85136 $ env = new Environment ();
86137 $ request = new ServerRequest (new Uri ($ env ->getUriParts ($ parts )), $ env );
87- $ kernel = new Kernel (new Container (), [
88- AddCommandMiddleware::class,
89- ConfigPropsMiddleware::class,
90- CheckAllowedProps::class,
91- LocalMiddleware::class,
92- CliInitMiddleware::class
93- ]);
138+ $ kernel = new Kernel (new Container (), $ this ->middlewares );
94139 $ kernel ->run ($ request );
95140 return $ kernel ;
96141 }
0 commit comments