Passed
Push — 0.8.x ( 68625b...156d51 )
by Alexander
06:01 queued 03:01
created
src/bundles/WebResourceBundle/bootstrap/bootstrap.php 2 patches
Indentation   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -48,8 +48,8 @@
 block discarded – undo
48 48
 
49 49
 // Register the autoloader
50 50
 if ( ! class_exists(Syscodes\Bundles\WebResourceBundle\Autoloader\Autoload::class, false)) {
51
-	require_once SYS_PATH.'src/bundles/WebResourceBundle/Autoloader/AutoloadConfig.php';
52
-	require_once SYS_PATH.'src/bundles/WebResourceBundle/Autoloader/Autoload.php';
51
+    require_once SYS_PATH.'src/bundles/WebResourceBundle/Autoloader/AutoloadConfig.php';
52
+    require_once SYS_PATH.'src/bundles/WebResourceBundle/Autoloader/Autoload.php';
53 53
 }
54 54
 
55 55
 // Activate the framework class autoloader
Please login to merge, or discard this patch.
Braces   +9 added lines, -3 removed lines patch added patch discarded remove patch
@@ -24,9 +24,15 @@
 block discarded – undo
24 24
  */
25 25
 
26 26
 // Define the absolute paths for configured directories
27
-if ( ! defined('APP_PATH')) define('APP_PATH', realpath($paths['path.app']).DIRECTORY_SEPARATOR);
28
-if ( ! defined('CON_PATH')) define('CON_PATH', realpath($paths['path.config']).DIRECTORY_SEPARATOR);
29
-if ( ! defined('SYS_PATH')) define('SYS_PATH', realpath($paths['path.sys']).DIRECTORY_SEPARATOR);
27
+if ( ! defined('APP_PATH')) {
28
+    define('APP_PATH', realpath($paths['path.app']).DIRECTORY_SEPARATOR);
29
+}
30
+if ( ! defined('CON_PATH')) {
31
+    define('CON_PATH', realpath($paths['path.config']).DIRECTORY_SEPARATOR);
32
+}
33
+if ( ! defined('SYS_PATH')) {
34
+    define('SYS_PATH', realpath($paths['path.sys']).DIRECTORY_SEPARATOR);
35
+}
30 36
 
31 37
 // Call the file constants
32 38
 require CON_PATH.'constants.php';
Please login to merge, or discard this patch.
src/bundles/WebResourceBundle/Autoloader/AutoloadConfig.php 1 patch
Indentation   +63 added lines, -63 removed lines patch added patch discarded remove patch
@@ -30,73 +30,73 @@
 block discarded – undo
30 30
  */
31 31
 class AutoloadConfig 
32 32
 {
33
-	/**
34
-	 * Map of class names and locations.
35
-	 * 
36
-	 * @var array $classmap
37
-	 */
38
-	public $classmap = [];
33
+    /**
34
+     * Map of class names and locations.
35
+     * 
36
+     * @var array $classmap
37
+     */
38
+    public $classmap = [];
39 39
 	
40
-	/**
41
-	 * Array of files for autoloading.
42
-	 * 
43
-	 * @var array $files
44
-	 */
45
-	public $files = [];
40
+    /**
41
+     * Array of files for autoloading.
42
+     * 
43
+     * @var array $files
44
+     */
45
+    public $files = [];
46 46
 	
47
-	/**
48
-	 * Array of namespaces for autoloading.
49
-	 * 
50
-	 * @var array $psr4
51
-	 */
52
-	public $psr4 = [];
47
+    /**
48
+     * Array of namespaces for autoloading.
49
+     * 
50
+     * @var array $psr4
51
+     */
52
+    public $psr4 = [];
53 53
 
54
-	/**
55
-	 * ---------------------------------------------------------------------
56
-	 * Class Map
57
-	 * ---------------------------------------------------------------------
58
-	 *
59
-	 * The class map provides a map of class names and their exact location 
60
-	 * on the drive.
61
-	 *  
62
-	 * @var string[] $coreClassmap
63
-	 */
64
-	protected $coreClassmap = __DIR__.DIRECTORY_SEPARATOR.'Register'.DIRECTORY_SEPARATOR.'autoloadClassmap.php';
54
+    /**
55
+     * ---------------------------------------------------------------------
56
+     * Class Map
57
+     * ---------------------------------------------------------------------
58
+     *
59
+     * The class map provides a map of class names and their exact location 
60
+     * on the drive.
61
+     *  
62
+     * @var string[] $coreClassmap
63
+     */
64
+    protected $coreClassmap = __DIR__.DIRECTORY_SEPARATOR.'Register'.DIRECTORY_SEPARATOR.'autoloadClassmap.php';
65 65
 
66
-	/**
67
-	 * ---------------------------------------------------------------------
68
-	 * Include Files
69
-	 * ---------------------------------------------------------------------
70
-	 * 
71
-	 * This maps the locations of any files in your application to 
72
-	 * their location on the file system.
73
-	 * 
74
-	 * @var string[] $coreFiles
75
-	 */
76
-	protected $coreFiles = __DIR__.DIRECTORY_SEPARATOR.'Register'.DIRECTORY_SEPARATOR.'autoloadFiles.php';
66
+    /**
67
+     * ---------------------------------------------------------------------
68
+     * Include Files
69
+     * ---------------------------------------------------------------------
70
+     * 
71
+     * This maps the locations of any files in your application to 
72
+     * their location on the file system.
73
+     * 
74
+     * @var string[] $coreFiles
75
+     */
76
+    protected $coreFiles = __DIR__.DIRECTORY_SEPARATOR.'Register'.DIRECTORY_SEPARATOR.'autoloadFiles.php';
77 77
 
78
-	/**
79
-	 * ---------------------------------------------------------------------
80
-	 * Namespaces
81
-	 * ---------------------------------------------------------------------
82
-	 *
83
-	 * This maps the locations of any namespaces in your application to 
84
-	 * their location on the file system. These are used by the Autoloader 
85
-	 * to locate files the first time they have been instantiated. 
86
-	 * 
87
-	 * @var string[] $corePsr4
88
-	 */
89
-	protected $corePsr4 = __DIR__.DIRECTORY_SEPARATOR.'Register'.DIRECTORY_SEPARATOR.'autoloadPsr4.php';
78
+    /**
79
+     * ---------------------------------------------------------------------
80
+     * Namespaces
81
+     * ---------------------------------------------------------------------
82
+     *
83
+     * This maps the locations of any namespaces in your application to 
84
+     * their location on the file system. These are used by the Autoloader 
85
+     * to locate files the first time they have been instantiated. 
86
+     * 
87
+     * @var string[] $corePsr4
88
+     */
89
+    protected $corePsr4 = __DIR__.DIRECTORY_SEPARATOR.'Register'.DIRECTORY_SEPARATOR.'autoloadPsr4.php';
90 90
 
91
-	/**
92
-	 * Constructor. Create a new Autoload instance.
93
-	 * 
94
-	 * @return void
95
-	 */
96
-	public function __construct()
97
-	{
98
-		$this->psr4     = array_merge(require $this->corePsr4, $this->psr4);
99
-		$this->classmap = array_merge(require $this->coreClassmap, $this->classmap);
100
-		$this->files    = array_merge(require $this->coreFiles, $this->files);
101
-	}
91
+    /**
92
+     * Constructor. Create a new Autoload instance.
93
+     * 
94
+     * @return void
95
+     */
96
+    public function __construct()
97
+    {
98
+        $this->psr4     = array_merge(require $this->corePsr4, $this->psr4);
99
+        $this->classmap = array_merge(require $this->coreClassmap, $this->classmap);
100
+        $this->files    = array_merge(require $this->coreFiles, $this->files);
101
+    }
102 102
 }
103 103
\ No newline at end of file
Please login to merge, or discard this patch.
src/bundles/WebResourceBundle/Autoloader/Autoloader.php 1 patch
Indentation   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -105,7 +105,7 @@
 block discarded – undo
105 105
         }
106 106
 
107 107
         if ($config->enabledInComposer) {
108
-           $this->enabledComposerNamespaces();
108
+            $this->enabledComposerNamespaces();
109 109
         }
110 110
 
111 111
         return $this;
Please login to merge, or discard this patch.
src/bundles/WebResourceBundle/Autoloader/Autoload.php 1 patch
Indentation   +25 added lines, -25 removed lines patch added patch discarded remove patch
@@ -27,32 +27,32 @@
 block discarded – undo
27 27
  */
28 28
 final class Autoload extends AutoloadConfig
29 29
 {
30
-	/**
31
-	 * Map of class names and locations.
32
-	 * 
33
-	 * @var array $classmap
34
-	 */
35
-	public $classmap = [];
30
+    /**
31
+     * Map of class names and locations.
32
+     * 
33
+     * @var array $classmap
34
+     */
35
+    public $classmap = [];
36 36
 	
37
-	/**
38
-	 * If true, then auto-enabled will happen across all namespaces
39
-	 * loaded by Composer, as well as the namespaces configured locally.
40
-	 * 
41
-	 * @var bool $enabledInComposer
42
-	 */
43
-	public $enabledInComposer = true;
37
+    /**
38
+     * If true, then auto-enabled will happen across all namespaces
39
+     * loaded by Composer, as well as the namespaces configured locally.
40
+     * 
41
+     * @var bool $enabledInComposer
42
+     */
43
+    public $enabledInComposer = true;
44 44
 	
45
-	/**
46
-	 * Array of files for autoloading.
47
-	 * 
48
-	 * @var array $files
49
-	 */
50
-	public $files = [];
45
+    /**
46
+     * Array of files for autoloading.
47
+     * 
48
+     * @var array $files
49
+     */
50
+    public $files = [];
51 51
 	
52
-	/**
53
-	 * Array of namespaces for autoloading.
54
-	 * 
55
-	 * @var array $psr4
56
-	 */
57
-	public $psr4 = [];
52
+    /**
53
+     * Array of namespaces for autoloading.
54
+     * 
55
+     * @var array $psr4
56
+     */
57
+    public $psr4 = [];
58 58
 }
59 59
\ No newline at end of file
Please login to merge, or discard this patch.
src/components/Routing/Router.php 1 patch
Indentation   +657 added lines, -657 removed lines patch added patch discarded remove patch
@@ -43,691 +43,691 @@
 block discarded – undo
43 43
  */
44 44
 class Router implements Routable
45 45
 {
46
-	use Concerns\RouteMap,
47
-	    Macroable {
48
-		    __call as macroCall;
49
-	    }
50
-
51
-	/**
52
-	 * The registered route value binders.
53
-	 * 
54
-	 * @var array $binders
55
-	 */
56
-	protected $binders = [];
57
-
58
-	/**
59
-	 * The container instance used by the router.
60
-	 * 
61
-	 * @var \Syscodes\Components\Contracts\Container\Container $container
62
-	 */
63
-	protected $container;
64
-
65
-	/**
66
-	 * Variable of group route.
67
-	 *  
68
-	 * @var array $groupStack
69
-	 */
70
-	protected $groupStack = [];
71
-
72
-	/**
73
-	 * Middleware for function of filters
74
-	 *  
75
-	 * @var array $middleware
76
-	 */
77
-	protected $middleware = [];
46
+    use Concerns\RouteMap,
47
+        Macroable {
48
+            __call as macroCall;
49
+        }
50
+
51
+    /**
52
+     * The registered route value binders.
53
+     * 
54
+     * @var array $binders
55
+     */
56
+    protected $binders = [];
57
+
58
+    /**
59
+     * The container instance used by the router.
60
+     * 
61
+     * @var \Syscodes\Components\Contracts\Container\Container $container
62
+     */
63
+    protected $container;
64
+
65
+    /**
66
+     * Variable of group route.
67
+     *  
68
+     * @var array $groupStack
69
+     */
70
+    protected $groupStack = [];
71
+
72
+    /**
73
+     * Middleware for function of filters
74
+     *  
75
+     * @var array $middleware
76
+     */
77
+    protected $middleware = [];
78 78
 	
79
-	/**
80
-	 * All of the middleware groups.
81
-	 * 
82
-	 * @var array $middlewareGroups
83
-	 */
84
-	protected $middlewareGroups = [];
79
+    /**
80
+     * All of the middleware groups.
81
+     * 
82
+     * @var array $middlewareGroups
83
+     */
84
+    protected $middlewareGroups = [];
85 85
 	
86
-	/**
87
-	 * The priority-sorted list of middleware.
88
-	 * 
89
-	 * @var array $middlewarePriority
90
-	 */
91
-	public $middlewarePriority = [];
86
+    /**
87
+     * The priority-sorted list of middleware.
88
+     * 
89
+     * @var array $middlewarePriority
90
+     */
91
+    public $middlewarePriority = [];
92 92
 	
93
-	/**
94
-	 * The globally available parameter patterns.
95
-	 * 
96
-	 * @var array $patterns
97
-	 */
98
-	protected $patterns = [];
99
-
100
-	/**
101
-	 * Resolve the given route.
102
-	 * 
103
-	 * @var \Syscodes\Components\Routing\Resolver\RouteResolver $resolves
104
-	 */
105
-	protected $resolves;
106
-
107
-	/**
108
-	 * The Resource instance.
109
-	 * 
110
-	 * @var \Syscodes\Components\Routing\Resources\ResourceRegister $resources
111
-	 */
112
-	protected $resources;
113
-
114
-	/** 
115
-	 * The route collection instance. 
116
-	 * 
117
-	 * @var \Syscodes\Components\Routing\Collections\RouteCollection $routes
118
-	 */
119
-	protected $routes;
120
-
121
-	/**
122
-	 * Constructor. Create a new Router instance.
123
-	 *
124
-	 * @param  \Syscodes\Components\Contracts\Container\Container|null  $container
125
-	 * 
126
-	 * @return void
127
-	 */
128
-	public function __construct(Container $container = null)
129
-	{
130
-		$this->routes    = new RouteCollection;
131
-		$this->container = $container ?: new Container;
132
-		$this->resolves  = new RouteResolver($this, $this->routes, $this->container);
133
-	}
134
-
135
-	/**
136
-	 * Get the prefix from the group on the stack.
137
-	 *
138
-	 * @return string
139
-	 */
140
-	public function getGroupPrefix(): string
141
-	{
142
-		if ($this->hasGroupStack()) {
143
-			$last = end($this->groupStack);
144
-
145
-			return $last['prefix'] ?? '';
146
-		}
147
-
148
-		return '';
149
-	}
150
-
151
-	/**
152
-	 * Group a series of routes under a single URL segment. This is handy
153
-	 * for grouping items into an admin area, like:
154
-	 *
155
-	 *   Example:
156
-	 *      // Creates route: /admin show the word 'User'
157
-	 *      Route::group(['prefix' => 'admin'], function() {	 
158
-	 *
159
-	 *          Route::get('/user', function() {
160
-	 *	            echo 'Hello world..!';
161
-	 *          });
162
-	 *
163
-	 *      }); /admin/user
164
-	 *
165
-	 * @param  array  $attributes
166
-	 * @param  \Closure|array|string  $callback
167
-	 *
168
-	 * @return void
169
-	 */
170
-	public function group(array $attributes, $routes): void
171
-	{
172
-		foreach (Arr::wrap($routes) as $groupRoutes) {
173
-			$this->updateGroupStack($attributes);
93
+    /**
94
+     * The globally available parameter patterns.
95
+     * 
96
+     * @var array $patterns
97
+     */
98
+    protected $patterns = [];
99
+
100
+    /**
101
+     * Resolve the given route.
102
+     * 
103
+     * @var \Syscodes\Components\Routing\Resolver\RouteResolver $resolves
104
+     */
105
+    protected $resolves;
106
+
107
+    /**
108
+     * The Resource instance.
109
+     * 
110
+     * @var \Syscodes\Components\Routing\Resources\ResourceRegister $resources
111
+     */
112
+    protected $resources;
113
+
114
+    /** 
115
+     * The route collection instance. 
116
+     * 
117
+     * @var \Syscodes\Components\Routing\Collections\RouteCollection $routes
118
+     */
119
+    protected $routes;
120
+
121
+    /**
122
+     * Constructor. Create a new Router instance.
123
+     *
124
+     * @param  \Syscodes\Components\Contracts\Container\Container|null  $container
125
+     * 
126
+     * @return void
127
+     */
128
+    public function __construct(Container $container = null)
129
+    {
130
+        $this->routes    = new RouteCollection;
131
+        $this->container = $container ?: new Container;
132
+        $this->resolves  = new RouteResolver($this, $this->routes, $this->container);
133
+    }
134
+
135
+    /**
136
+     * Get the prefix from the group on the stack.
137
+     *
138
+     * @return string
139
+     */
140
+    public function getGroupPrefix(): string
141
+    {
142
+        if ($this->hasGroupStack()) {
143
+            $last = end($this->groupStack);
144
+
145
+            return $last['prefix'] ?? '';
146
+        }
147
+
148
+        return '';
149
+    }
150
+
151
+    /**
152
+     * Group a series of routes under a single URL segment. This is handy
153
+     * for grouping items into an admin area, like:
154
+     *
155
+     *   Example:
156
+     *      // Creates route: /admin show the word 'User'
157
+     *      Route::group(['prefix' => 'admin'], function() {	 
158
+     *
159
+     *          Route::get('/user', function() {
160
+     *	            echo 'Hello world..!';
161
+     *          });
162
+     *
163
+     *      }); /admin/user
164
+     *
165
+     * @param  array  $attributes
166
+     * @param  \Closure|array|string  $callback
167
+     *
168
+     * @return void
169
+     */
170
+    public function group(array $attributes, $routes): void
171
+    {
172
+        foreach (Arr::wrap($routes) as $groupRoutes) {
173
+            $this->updateGroupStack($attributes);
174 174
 	
175
-			$this->loadRoutes($groupRoutes);
175
+            $this->loadRoutes($groupRoutes);
176 176
 	
177
-			array_pop($this->groupStack);			
178
-		}
179
-	}
180
-
181
-	/**
182
-	 * Update the group stack with the given attributes.
183
-	 * 
184
-	 * @param  array  $attributes
185
-	 * 
186
-	 * @return void
187
-	 */
188
-	protected function updateGroupStack(array $attributes): void
189
-	{
190
-		if ($this->hasGroupStack()) {
191
-			$attributes = $this->mergeLastGroup($attributes);
192
-		}
193
-
194
-		$this->groupStack[] = $attributes;
195
-	}
196
-
197
-	/**
198
-	 * Merge the given group attributes.
199
-	 * 
200
-	 * @param  array  $new
201
-	 * @param  bool  $existsPrefix
202
-	 * 
203
-	 * @return array
204
-	 */
205
-	public function mergeLastGroup($new, bool $existsPrefix = true): array
206
-	{
207
-		return RouteGroup::mergeGroup($new, end($this->groupStack), $existsPrefix);
208
-	}
177
+            array_pop($this->groupStack);			
178
+        }
179
+    }
180
+
181
+    /**
182
+     * Update the group stack with the given attributes.
183
+     * 
184
+     * @param  array  $attributes
185
+     * 
186
+     * @return void
187
+     */
188
+    protected function updateGroupStack(array $attributes): void
189
+    {
190
+        if ($this->hasGroupStack()) {
191
+            $attributes = $this->mergeLastGroup($attributes);
192
+        }
193
+
194
+        $this->groupStack[] = $attributes;
195
+    }
196
+
197
+    /**
198
+     * Merge the given group attributes.
199
+     * 
200
+     * @param  array  $new
201
+     * @param  bool  $existsPrefix
202
+     * 
203
+     * @return array
204
+     */
205
+    public function mergeLastGroup($new, bool $existsPrefix = true): array
206
+    {
207
+        return RouteGroup::mergeGroup($new, end($this->groupStack), $existsPrefix);
208
+    }
209 209
 	
210
-	/**
211
-	 * Load the provided routes.
212
-	 * 
213
-	 * @param  \Closure|string  $callback
214
-	 * 
215
-	 * @return void
216
-	 */
217
-	protected function loadRoutes($callback): void
218
-	{
219
-		if ($callback instanceof Closure) {
220
-			$callback($this);
221
-		} else {
222
-			(new RouteFileRegister($this))->register($callback);
223
-		}
224
-	}
225
-
226
-	/**
227
-	 * Add a route to the underlying route collection. 
228
-	 *
229
-	 * @param  array|string  $method
230
-	 * @param  string  $route
231
-	 * @param  mixed  $action
232
-	 *
233
-	 * @return \Syscodes\Components\Routing\Route
234
-	 */
235
-	public function addRoute($method, $route, $action)
236
-	{
237
-		return $this->routes->add($this->map($method, $route, $action));
238
-	}
210
+    /**
211
+     * Load the provided routes.
212
+     * 
213
+     * @param  \Closure|string  $callback
214
+     * 
215
+     * @return void
216
+     */
217
+    protected function loadRoutes($callback): void
218
+    {
219
+        if ($callback instanceof Closure) {
220
+            $callback($this);
221
+        } else {
222
+            (new RouteFileRegister($this))->register($callback);
223
+        }
224
+    }
225
+
226
+    /**
227
+     * Add a route to the underlying route collection. 
228
+     *
229
+     * @param  array|string  $method
230
+     * @param  string  $route
231
+     * @param  mixed  $action
232
+     *
233
+     * @return \Syscodes\Components\Routing\Route
234
+     */
235
+    public function addRoute($method, $route, $action)
236
+    {
237
+        return $this->routes->add($this->map($method, $route, $action));
238
+    }
239 239
 	
240
-	/**
241
-	 * Register a new fallback route with the router.
242
-	 * 
243
-	 * @param  array|string|callable|null  $action
244
-	 * 
245
-	 * @return \Syscodes\Components\Routing\Route
246
-	 */
247
-	public function fallback($action)
248
-	{
249
-		$placeholder = 'fallbackPlaceholder';
240
+    /**
241
+     * Register a new fallback route with the router.
242
+     * 
243
+     * @param  array|string|callable|null  $action
244
+     * 
245
+     * @return \Syscodes\Components\Routing\Route
246
+     */
247
+    public function fallback($action)
248
+    {
249
+        $placeholder = 'fallbackPlaceholder';
250 250
 		
251
-		return $this->addRoute('GET', "{{$placeholder}}", $action)
252
-		            ->where($placeholder, '.*')
253
-		            ->fallback();
254
-	}
255
-
256
-	/**
257
-	 * Create a redirect from one URI to another.
258
-	 * 
259
-	 * @param  string  $uri
260
-	 * @param  string  $destination
261
-	 * @param  int  $status
262
-	 * 
263
-	 * @return \Syscodes\Components\Routing\Route
264
-	 */
265
-	public function redirect($uri, $destination, $status = 302)
266
-	{
267
-		return $this->any($uri, '\Syscodes\Components\Routing\Controllers\RedirectController')
268
-		            ->defaults('destination', $destination)
269
-		            ->defaults('status', $status);
270
-	}
251
+        return $this->addRoute('GET', "{{$placeholder}}", $action)
252
+                    ->where($placeholder, '.*')
253
+                    ->fallback();
254
+    }
255
+
256
+    /**
257
+     * Create a redirect from one URI to another.
258
+     * 
259
+     * @param  string  $uri
260
+     * @param  string  $destination
261
+     * @param  int  $status
262
+     * 
263
+     * @return \Syscodes\Components\Routing\Route
264
+     */
265
+    public function redirect($uri, $destination, $status = 302)
266
+    {
267
+        return $this->any($uri, '\Syscodes\Components\Routing\Controllers\RedirectController')
268
+                    ->defaults('destination', $destination)
269
+                    ->defaults('status', $status);
270
+    }
271 271
 	
272
-	/**
273
-	 * Create a permanent redirect from one URI to another.
274
-	 * 
275
-	 * @param  string  $uri
276
-	 * @param  string  $destination
277
-	 * 
278
-	 * @return \Syscodes\Components\Routing\Route
279
-	 */
280
-	public function permanentRedirect($uri, $destination)
281
-	{
282
-		return $this->redirect($uri, $destination, 301);
283
-	}
284
-
285
-	/**
286
-	 * Register a new route that returns a view.
287
-	 * 
288
-	 * @param  string  $uri
289
-	 * @param  string  $view
290
-	 * @param  array  $data
291
-	 * @param  int|array  $status
292
-	 * @param  array  $headers
293
-	 * 
294
-	 * @return \Syscodes\Components\Routing\Route
295
-	 */
296
-	public function view($uri, $view, $data = [], $status = 200, array $headers = [])
297
-	{
298
-		return $this->match(['GET', 'HEAD'], $uri, '\Syscodes\Components\Routing\Controllers\ViewController')
299
-		            ->setDefaults([
300
-		                'view' => $view,
301
-		                'data' => $data,
302
-		                'status' => is_array($status) ? 200 : $status,
303
-		                'headers' => is_array($status) ? $status : $headers,
304
-		            ]);
305
-	}
306
-
307
-	/**
308
-	 * Add new route to routes array.
309
-	 *
310
-	 * @param  array|string  $method
311
-	 * @param  string  $route
312
-	 * @param  mixed  $action
313
-	 *
314
-	 * @return \Syscodes\Components\Routing\Route
315
-	 * 
316
-	 * @throws \InvalidArgumentException
317
-	 */
318
-	public function map($method, $route, $action): Route
319
-	{
320
-		if ($this->actionReferencesController($action)) {
321
-			$action = $this->convertToControllerAction($action);
322
-		}
323
-
324
-		$route = $this->newRoute(
325
-		              $method,
326
-		              $this->prefix($route),
327
-		              $action
328
-		         );
329
-
330
-		if ($this->hasGroupStack()) {
331
-			$this->mergeGroupAttributesIntoRoute($route);			
332
-		}
333
-
334
-		$this->addWhereClausesToRoute($route);
272
+    /**
273
+     * Create a permanent redirect from one URI to another.
274
+     * 
275
+     * @param  string  $uri
276
+     * @param  string  $destination
277
+     * 
278
+     * @return \Syscodes\Components\Routing\Route
279
+     */
280
+    public function permanentRedirect($uri, $destination)
281
+    {
282
+        return $this->redirect($uri, $destination, 301);
283
+    }
284
+
285
+    /**
286
+     * Register a new route that returns a view.
287
+     * 
288
+     * @param  string  $uri
289
+     * @param  string  $view
290
+     * @param  array  $data
291
+     * @param  int|array  $status
292
+     * @param  array  $headers
293
+     * 
294
+     * @return \Syscodes\Components\Routing\Route
295
+     */
296
+    public function view($uri, $view, $data = [], $status = 200, array $headers = [])
297
+    {
298
+        return $this->match(['GET', 'HEAD'], $uri, '\Syscodes\Components\Routing\Controllers\ViewController')
299
+                    ->setDefaults([
300
+                        'view' => $view,
301
+                        'data' => $data,
302
+                        'status' => is_array($status) ? 200 : $status,
303
+                        'headers' => is_array($status) ? $status : $headers,
304
+                    ]);
305
+    }
306
+
307
+    /**
308
+     * Add new route to routes array.
309
+     *
310
+     * @param  array|string  $method
311
+     * @param  string  $route
312
+     * @param  mixed  $action
313
+     *
314
+     * @return \Syscodes\Components\Routing\Route
315
+     * 
316
+     * @throws \InvalidArgumentException
317
+     */
318
+    public function map($method, $route, $action): Route
319
+    {
320
+        if ($this->actionReferencesController($action)) {
321
+            $action = $this->convertToControllerAction($action);
322
+        }
323
+
324
+        $route = $this->newRoute(
325
+                        $method,
326
+                        $this->prefix($route),
327
+                        $action
328
+                    );
329
+
330
+        if ($this->hasGroupStack()) {
331
+            $this->mergeGroupAttributesIntoRoute($route);			
332
+        }
333
+
334
+        $this->addWhereClausesToRoute($route);
335 335
 		
336
-		return $route;
337
-	}
336
+        return $route;
337
+    }
338 338
 	
339
-	/**
340
-	 * Determine if the action is routing to a controller.
341
-	 * 
342
-	 * @param  array  $action
343
-	 * 
344
-	 * @return bool
345
-	 */
346
-	protected function actionReferencesController($action): bool
347
-	{
348
-		if ( ! $action instanceof Closure) {
349
-			return is_string($action) || (isset($action['uses']) && is_string($action['uses']));
350
-		}
339
+    /**
340
+     * Determine if the action is routing to a controller.
341
+     * 
342
+     * @param  array  $action
343
+     * 
344
+     * @return bool
345
+     */
346
+    protected function actionReferencesController($action): bool
347
+    {
348
+        if ( ! $action instanceof Closure) {
349
+            return is_string($action) || (isset($action['uses']) && is_string($action['uses']));
350
+        }
351 351
 		
352
-		return false;
353
-	}
352
+        return false;
353
+    }
354 354
 	
355
-	/**
356
-	 * Add a controller based route action to the action array.
357
-	 * 
358
-	 * @param  array|string  $action
359
-	 * 
360
-	 * @return array
361
-	 */
362
-	protected function convertToControllerAction($action): array
363
-	{
364
-		if (is_string($action)) {
365
-			$action = ['uses' => $action];
366
-		}
355
+    /**
356
+     * Add a controller based route action to the action array.
357
+     * 
358
+     * @param  array|string  $action
359
+     * 
360
+     * @return array
361
+     */
362
+    protected function convertToControllerAction($action): array
363
+    {
364
+        if (is_string($action)) {
365
+            $action = ['uses' => $action];
366
+        }
367 367
 		
368
-		if ($this->hasGroupStack()) {
369
-			$action['uses'] = $this->prependGroupController($action['uses']);
370
-			$action['uses'] = $this->prependGroupNamespace($action['uses']);
371
-		}
368
+        if ($this->hasGroupStack()) {
369
+            $action['uses'] = $this->prependGroupController($action['uses']);
370
+            $action['uses'] = $this->prependGroupNamespace($action['uses']);
371
+        }
372 372
 		
373
-		$action['controller'] = $action['uses'];
373
+        $action['controller'] = $action['uses'];
374 374
 		
375
-		return $action;
376
-	}
375
+        return $action;
376
+    }
377 377
 	
378
-	/**
379
-	 * Prepend the last group namespaces onto the use clause.
380
-	 * 
381
-	 * @param  string  $class
382
-	 * 
383
-	 * @return string
384
-	 */
385
-	protected function prependGroupNamespace($class): string
386
-	{
387
-		$group = end($this->groupStack);
378
+    /**
379
+     * Prepend the last group namespaces onto the use clause.
380
+     * 
381
+     * @param  string  $class
382
+     * 
383
+     * @return string
384
+     */
385
+    protected function prependGroupNamespace($class): string
386
+    {
387
+        $group = end($this->groupStack);
388 388
 		
389
-		return isset($group['namespace']) && ! Str::startsWith($class, '\\') && ! Str::startsWith($class, $group['namespace']) 
390
-		            ? $group['namespace'].'\\'.$class 
391
-					: $class;
392
-	}
389
+        return isset($group['namespace']) && ! Str::startsWith($class, '\\') && ! Str::startsWith($class, $group['namespace']) 
390
+                    ? $group['namespace'].'\\'.$class 
391
+                    : $class;
392
+    }
393 393
 	
394
-	/**
395
-	 * Prepend the last group controller onto the use clause.
396
-	 * 
397
-	 * @param  string  $class
398
-	 * 
399
-	 * @return string
400
-	 */
401
-	protected function prependGroupController($class): string
402
-	{
403
-		$group = end($this->groupStack);
394
+    /**
395
+     * Prepend the last group controller onto the use clause.
396
+     * 
397
+     * @param  string  $class
398
+     * 
399
+     * @return string
400
+     */
401
+    protected function prependGroupController($class): string
402
+    {
403
+        $group = end($this->groupStack);
404 404
 		
405
-		if ( ! isset($group['controller'])) {
406
-			return $class;
407
-		}
405
+        if ( ! isset($group['controller'])) {
406
+            return $class;
407
+        }
408 408
 		
409
-		if (class_exists($class)) {
410
-			return $class;
411
-		}
409
+        if (class_exists($class)) {
410
+            return $class;
411
+        }
412 412
 		
413
-		if (Str::contains($class, '@')) {
414
-			return $class;
415
-		}
413
+        if (Str::contains($class, '@')) {
414
+            return $class;
415
+        }
416 416
 		
417
-		return $group['controller'].'@'.$class;
418
-	}
419
-
420
-	/**
421
-	 * Create a new Route object.
422
-	 * 
423
-	 * @param  array|string  $method
424
-	 * @param  string  $uri
425
-	 * @param  mixed  $action
426
-	 * 
427
-	 * @return \Syscodes\Components\Routing\Route
428
-	 */
429
-	public function newRoute($method, $uri, $action): route
430
-	{
431
-		return take(new Route($method, $uri, $action))
432
-		                ->setContainer($this->container);
433
-	}
417
+        return $group['controller'].'@'.$class;
418
+    }
419
+
420
+    /**
421
+     * Create a new Route object.
422
+     * 
423
+     * @param  array|string  $method
424
+     * @param  string  $uri
425
+     * @param  mixed  $action
426
+     * 
427
+     * @return \Syscodes\Components\Routing\Route
428
+     */
429
+    public function newRoute($method, $uri, $action): route
430
+    {
431
+        return take(new Route($method, $uri, $action))
432
+                        ->setContainer($this->container);
433
+    }
434 434
 	
435
-	/**
436
-	 * Determine if the router currently has a group stack.
437
-	 * 
438
-	 * @return bool
439
-	 */
440
-	public function hasGroupStack(): bool
441
-	{
442
-		return ! empty($this->groupStack);
443
-	}
435
+    /**
436
+     * Determine if the router currently has a group stack.
437
+     * 
438
+     * @return bool
439
+     */
440
+    public function hasGroupStack(): bool
441
+    {
442
+        return ! empty($this->groupStack);
443
+    }
444 444
 	
445
-	/**
446
-	 * Merge the group stack with the controller action.
447
-	 * 
448
-	 * @param  \Syscpde\Routing\Route  $route
449
-	 * 
450
-	 * @return void
451
-	 */
452
-	protected function mergeGroupAttributesIntoRoute($route): void
453
-	{
454
-		$action = $this->mergeLastGroup(
455
-			$route->getAction(),
456
-			$existsPrefix = false
457
-		);
445
+    /**
446
+     * Merge the group stack with the controller action.
447
+     * 
448
+     * @param  \Syscpde\Routing\Route  $route
449
+     * 
450
+     * @return void
451
+     */
452
+    protected function mergeGroupAttributesIntoRoute($route): void
453
+    {
454
+        $action = $this->mergeLastGroup(
455
+            $route->getAction(),
456
+            $existsPrefix = false
457
+        );
458 458
 		
459
-		$route->setAction($action);
460
-	}
459
+        $route->setAction($action);
460
+    }
461 461
 	
462
-	/**
463
-	 * Add the necessary where clauses to the route based on its initial registration.
464
-	 * 
465
-	 * @param  \Syscodes\Components\Routing\Route  $route
466
-	 * 
467
-	 * @return \Syscodes\Components\Routing\Route
468
-	 */
469
-	protected function addWhereClausesToRoute($route): Route
470
-	{
471
-		$route->where(array_merge(
472
-			$this->patterns, Arr::get($route->getAction(), 'where', [])
473
-		));
474
-
475
-		return $route;
476
-	}
477
-
478
-	/**
479
-	 * Add a prefix to the route URI.
480
-	 *
481
-	 * @param  string  $uri
482
-	 *
483
-	 * @return string
484
-	 */
485
-	protected function prefix($uri): string
486
-	{
487
-		return trim(trim($this->getGroupPrefix(), '/').'/'.trim($uri, '/'), '/') ?: '/';
488
-	}
489
-
490
-	/**
491
-	 * Set a global where pattern on all routes.
492
-	 * 
493
-	 * @param  string  $name
494
-	 * @param  string  $pattern
495
-	 * 
496
-	 * @return void
497
-	 */
498
-	public function pattern($name, $pattern): void
499
-	{
500
-		$this->patterns[$name] = $pattern;
501
-	}
502
-
503
-	/**
504
-	 * Set a group of global where patterns on all routes.
505
-	 * 
506
-	 * @param  array  $patterns
507
-	 * 
508
-	 * @return void
509
-	 */
510
-	public function patterns($patterns): void
511
-	{
512
-		foreach ($patterns as $key => $pattern) {
513
-			$this->patterns[$key] = $pattern;
514
-		}
515
-	}
516
-
517
-	/**
518
-	 * Get a Resource instance.
519
-	 * 
520
-	 * @return \Syscodes\Components\Routing\ResourceRegister
521
-	 */
522
-	public function getResource()
523
-	{
524
-		if (isset($this->resources)) {
525
-			return $this->resources;
526
-		}
527
-
528
-		return $this->resources = new ResourceRegister($this);
529
-	}
530
-
531
-	/**
532
-	 * Dispatches the given url and call the method that belongs to the route.
533
-	 *
534
-	 * @param  \Syscodes\Components\Http\Request  $request
535
-	 *
536
-	 * @return mixed
537
-	 */
538
-	public function dispatch(Request $request)
539
-	{
540
-		return $this->resolves->resolve($request);
541
-	}
542
-
543
-	/**
544
-	 * Gather the middleware for the given route.
545
-	 * 
546
-	 * @param  \Syscodes\Components\Routing\Route  $route
547
-	 * 
548
-	 * @return array
549
-	 */
550
-	public function gatherRouteMiddleware(Route $route): array
551
-	{
552
-		$middleware = array_map(
553
-		                    fn ($name) => MiddlewareResolver::resolve($name, $this->middleware, $this->middlewareGroups),
554
-		                    $route->gatherMiddleware()
555
-		              );
462
+    /**
463
+     * Add the necessary where clauses to the route based on its initial registration.
464
+     * 
465
+     * @param  \Syscodes\Components\Routing\Route  $route
466
+     * 
467
+     * @return \Syscodes\Components\Routing\Route
468
+     */
469
+    protected function addWhereClausesToRoute($route): Route
470
+    {
471
+        $route->where(array_merge(
472
+            $this->patterns, Arr::get($route->getAction(), 'where', [])
473
+        ));
474
+
475
+        return $route;
476
+    }
477
+
478
+    /**
479
+     * Add a prefix to the route URI.
480
+     *
481
+     * @param  string  $uri
482
+     *
483
+     * @return string
484
+     */
485
+    protected function prefix($uri): string
486
+    {
487
+        return trim(trim($this->getGroupPrefix(), '/').'/'.trim($uri, '/'), '/') ?: '/';
488
+    }
489
+
490
+    /**
491
+     * Set a global where pattern on all routes.
492
+     * 
493
+     * @param  string  $name
494
+     * @param  string  $pattern
495
+     * 
496
+     * @return void
497
+     */
498
+    public function pattern($name, $pattern): void
499
+    {
500
+        $this->patterns[$name] = $pattern;
501
+    }
502
+
503
+    /**
504
+     * Set a group of global where patterns on all routes.
505
+     * 
506
+     * @param  array  $patterns
507
+     * 
508
+     * @return void
509
+     */
510
+    public function patterns($patterns): void
511
+    {
512
+        foreach ($patterns as $key => $pattern) {
513
+            $this->patterns[$key] = $pattern;
514
+        }
515
+    }
516
+
517
+    /**
518
+     * Get a Resource instance.
519
+     * 
520
+     * @return \Syscodes\Components\Routing\ResourceRegister
521
+     */
522
+    public function getResource()
523
+    {
524
+        if (isset($this->resources)) {
525
+            return $this->resources;
526
+        }
527
+
528
+        return $this->resources = new ResourceRegister($this);
529
+    }
530
+
531
+    /**
532
+     * Dispatches the given url and call the method that belongs to the route.
533
+     *
534
+     * @param  \Syscodes\Components\Http\Request  $request
535
+     *
536
+     * @return mixed
537
+     */
538
+    public function dispatch(Request $request)
539
+    {
540
+        return $this->resolves->resolve($request);
541
+    }
542
+
543
+    /**
544
+     * Gather the middleware for the given route.
545
+     * 
546
+     * @param  \Syscodes\Components\Routing\Route  $route
547
+     * 
548
+     * @return array
549
+     */
550
+    public function gatherRouteMiddleware(Route $route): array
551
+    {
552
+        $middleware = array_map(
553
+                            fn ($name) => MiddlewareResolver::resolve($name, $this->middleware, $this->middlewareGroups),
554
+                            $route->gatherMiddleware()
555
+                        );
556 556
 		
557
-		return Arr::flatten($middleware);
558
-	}
559
-
560
-	/**
561
-	 * Get all of the defined middleware
562
-	 * 
563
-	 * @return array
564
-	 */
565
-	public function getMiddleware(): array
566
-	{
567
-		return $this->middleware;
568
-	}
569
-
570
-	/**
571
-	 * Register a short-hand name for a middleware.
572
-	 * 
573
-	 * @param  string  $name
574
-	 * @param  string  $class
575
-	 * 
576
-	 * @return static
577
-	 */
578
-	public function aliasMiddleware($name, $class): static
579
-	{
580
-		$this->middleware[$name] = $class;
581
-
582
-		return $this;
583
-	}
584
-
585
-	/**
586
-	 * Register a group of middleware.
587
-	 * 
588
-	 * @param  string  $name
589
-	 * @param  array  $middleware
590
-	 * 
591
-	 * @return static
592
-	 */
593
-	public function middlewareGroup($name, array $middleware): static
594
-	{
595
-		$this->middlewareGroups[$name] = $middleware;
596
-
597
-		return $this;
598
-	}
599
-
600
-	/**
601
-	 * Check if a route with the given name exists.
602
-	 * 
603
-	 * @param  string  $name
604
-	 * 
605
-	 * @return bool
606
-	 */
607
-	public function has($name): bool
608
-	{
609
-		$names = is_array($name) ? $name : func_get_args();
610
-
611
-		foreach ($names as $value) {
612
-			if ( ! $this->routes->hasNamedRoute($value)) {
613
-				return false;
614
-			}
615
-		}
616
-
617
-		return true;
618
-	}
619
-
620
-	/**
621
-	 * Determine if the current route matches a pattern.
622
-	 * 
623
-	 * @param  mixed  ...$patterns
624
-	 * 
625
-	 * @return bool
626
-	 */
627
-	public function is(...$patterns): bool
628
-	{
629
-		return $this->currentRouteNamed(...$patterns);
630
-	}
631
-
632
-	/**
633
-	 * Determine if the current route matches a pattern.
634
-	 * 
635
-	 * @param  mixed  ...$patterns
636
-	 * 
637
-	 * @return bool
638
-	 */
639
-	public function currentRouteNamed(...$patterns): bool
640
-	{
641
-		return $this->resolves->current() && $this->resolves->current()->named(...$patterns);
642
-	}
643
-
644
-	/**
645
-	 * Register an array of resource controllers.
646
-	 * 
647
-	 * @param  array  $resources
648
-	 * @param  array  $options
649
-	 * 
650
-	 * @return void
651
-	 */
652
-	public function resources(array $resources, array $options = []): void
653
-	{
654
-		foreach ($resources as $name => $controller) {
655
-			$this->resource($name, $controller, $options);
656
-		}
657
-	}
658
-
659
-	/**
660
-	 * Route a resource to a controller.
661
-	 * 
662
-	 * @param  string  $name
663
-	 * @param  string  $controller
664
-	 * @param  array  $options
665
-	 * 
666
-	 * @return \Syscodes\Components\Routing\Resources\AwaitingResourceRegistration
667
-	 */
668
-	public function resource($name, $controller, array $options = []) 
669
-	{
670
-		if ($this->container) {
671
-			$register = $this->container->make(ResourceRegister::class);
672
-		} else {
673
-			$register = new ResourceRegister($this);
674
-		}
675
-
676
-		return new AwaitingResourceRegistration(
677
-			$register, $name, $controller, $options
678
-		);
679
-	}
680
-
681
-	/**
682
-	 * Get the route collection.
683
-	 *
684
-	 * @return array   
685
-	 */
686
-	public function getRoutes()
687
-	{
688
-		return $this->routes;
689
-	}
690
-
691
-	/**
692
-	 * Get or set the verbs used in the resource URIs.
693
-	 * 
694
-	 * @param  array  $verbs
695
-	 * 
696
-	 * @return array|null
697
-	 */
698
-	public function resourceVerbs(array $verbs = [])
699
-	{
700
-		ResourceRegister::verbs($verbs);
701
-	}
557
+        return Arr::flatten($middleware);
558
+    }
559
+
560
+    /**
561
+     * Get all of the defined middleware
562
+     * 
563
+     * @return array
564
+     */
565
+    public function getMiddleware(): array
566
+    {
567
+        return $this->middleware;
568
+    }
569
+
570
+    /**
571
+     * Register a short-hand name for a middleware.
572
+     * 
573
+     * @param  string  $name
574
+     * @param  string  $class
575
+     * 
576
+     * @return static
577
+     */
578
+    public function aliasMiddleware($name, $class): static
579
+    {
580
+        $this->middleware[$name] = $class;
581
+
582
+        return $this;
583
+    }
584
+
585
+    /**
586
+     * Register a group of middleware.
587
+     * 
588
+     * @param  string  $name
589
+     * @param  array  $middleware
590
+     * 
591
+     * @return static
592
+     */
593
+    public function middlewareGroup($name, array $middleware): static
594
+    {
595
+        $this->middlewareGroups[$name] = $middleware;
596
+
597
+        return $this;
598
+    }
599
+
600
+    /**
601
+     * Check if a route with the given name exists.
602
+     * 
603
+     * @param  string  $name
604
+     * 
605
+     * @return bool
606
+     */
607
+    public function has($name): bool
608
+    {
609
+        $names = is_array($name) ? $name : func_get_args();
610
+
611
+        foreach ($names as $value) {
612
+            if ( ! $this->routes->hasNamedRoute($value)) {
613
+                return false;
614
+            }
615
+        }
616
+
617
+        return true;
618
+    }
619
+
620
+    /**
621
+     * Determine if the current route matches a pattern.
622
+     * 
623
+     * @param  mixed  ...$patterns
624
+     * 
625
+     * @return bool
626
+     */
627
+    public function is(...$patterns): bool
628
+    {
629
+        return $this->currentRouteNamed(...$patterns);
630
+    }
631
+
632
+    /**
633
+     * Determine if the current route matches a pattern.
634
+     * 
635
+     * @param  mixed  ...$patterns
636
+     * 
637
+     * @return bool
638
+     */
639
+    public function currentRouteNamed(...$patterns): bool
640
+    {
641
+        return $this->resolves->current() && $this->resolves->current()->named(...$patterns);
642
+    }
643
+
644
+    /**
645
+     * Register an array of resource controllers.
646
+     * 
647
+     * @param  array  $resources
648
+     * @param  array  $options
649
+     * 
650
+     * @return void
651
+     */
652
+    public function resources(array $resources, array $options = []): void
653
+    {
654
+        foreach ($resources as $name => $controller) {
655
+            $this->resource($name, $controller, $options);
656
+        }
657
+    }
658
+
659
+    /**
660
+     * Route a resource to a controller.
661
+     * 
662
+     * @param  string  $name
663
+     * @param  string  $controller
664
+     * @param  array  $options
665
+     * 
666
+     * @return \Syscodes\Components\Routing\Resources\AwaitingResourceRegistration
667
+     */
668
+    public function resource($name, $controller, array $options = []) 
669
+    {
670
+        if ($this->container) {
671
+            $register = $this->container->make(ResourceRegister::class);
672
+        } else {
673
+            $register = new ResourceRegister($this);
674
+        }
675
+
676
+        return new AwaitingResourceRegistration(
677
+            $register, $name, $controller, $options
678
+        );
679
+    }
680
+
681
+    /**
682
+     * Get the route collection.
683
+     *
684
+     * @return array   
685
+     */
686
+    public function getRoutes()
687
+    {
688
+        return $this->routes;
689
+    }
690
+
691
+    /**
692
+     * Get or set the verbs used in the resource URIs.
693
+     * 
694
+     * @param  array  $verbs
695
+     * 
696
+     * @return array|null
697
+     */
698
+    public function resourceVerbs(array $verbs = [])
699
+    {
700
+        ResourceRegister::verbs($verbs);
701
+    }
702 702
 	
703
-	/**
704
-	 * Remove any duplicate middleware from the given array.
705
-	 * 
706
-	 * @param  array  $middleware
707
-	 * 
708
-	 * @return array
709
-	 */
710
-	public static function uniqueMiddleware(array $middleware): array
711
-	{
712
-		return array_unique($middleware, SORT_REGULAR);
713
-	}
714
-
715
-	/**
716
-	 * Magic method.
717
-	 * 
718
-	 * Dynamically handle calls into the router instance.
719
-	 * 
720
-	 * @param  string  $method
721
-	 * @param  array  $parameters
722
-	 * 
723
-	 * @return mixed
724
-	 */
725
-	public function __call($method, $parameters)
726
-	{
727
-		if (static::hasMacro($method)) {
728
-			return $this->macroCall($method, $parameters);
729
-		}
703
+    /**
704
+     * Remove any duplicate middleware from the given array.
705
+     * 
706
+     * @param  array  $middleware
707
+     * 
708
+     * @return array
709
+     */
710
+    public static function uniqueMiddleware(array $middleware): array
711
+    {
712
+        return array_unique($middleware, SORT_REGULAR);
713
+    }
714
+
715
+    /**
716
+     * Magic method.
717
+     * 
718
+     * Dynamically handle calls into the router instance.
719
+     * 
720
+     * @param  string  $method
721
+     * @param  array  $parameters
722
+     * 
723
+     * @return mixed
724
+     */
725
+    public function __call($method, $parameters)
726
+    {
727
+        if (static::hasMacro($method)) {
728
+            return $this->macroCall($method, $parameters);
729
+        }
730 730
 		
731
-		return (new RouteRegister($this))->attribute($method, $parameters[0]);
732
-	}
731
+        return (new RouteRegister($this))->attribute($method, $parameters[0]);
732
+    }
733 733
 }
734 734
\ No newline at end of file
Please login to merge, or discard this patch.
src/components/Http/Loaders/Parameters.php 1 patch
Indentation   +145 added lines, -145 removed lines patch added patch discarded remove patch
@@ -34,160 +34,160 @@
 block discarded – undo
34 34
  */
35 35
 class Parameters implements IteratorAggregate, Countable
36 36
 {
37
-	/**
38
-	 * Array parameters from the Server global.
39
-	 *
40
-	 * @var array $parameters
41
-	 */
42
-	protected $parameters;
43
-
44
-	/**
45
-	 * Parameter Object Constructor.
46
-	 *
47
-	 * @param  array  $parameters
48
-	 *
49
-	 * @return array
50
-	 */
51
-	public function __construct(array $parameters = [])
52
-	{
53
-		$this->parameters = $parameters;
54
-	}
55
-
56
-	/**
57
-	 * Returns the parameters.
58
-	 * 
59
-	 * @param  string|null  $key
60
-	 * 
61
-	 * @return array
62
-	 */
63
-	public function all(string $key = null): array
64
-	{
65
-		if (null === $key) {
66
-			return $this->parameters;
67
-		}
68
-
69
-		if ( ! is_array($value = $this->parameters[$key] ?? [])) {
70
-			throw new BadRequestException(
71
-				sprintf('Unexpected value for parameter "%s", got "%s"', $key, get_debug_type($value))
72
-			);
73
-		}
74
-
75
-		return $value;
76
-	}
77
-
78
-	/**
79
-	 * Returns the parameter keys.
80
-	 * 
81
-	 * @return array
82
-	 */
83
-	public function keys(): array
84
-	{
85
-		return array_keys($this->parameters);
86
-	}
87
-
88
-	/**
89
-	 * Replaces the current parameters.
90
-	 * 
91
-	 * @param  array  $parameters
92
-	 * 
93
-	 * @return void
94
-	 */
95
-	public function replace(array $parameters = []): void
96
-	{
97
-		$this->parameters = $parameters;
98
-	}
99
-
100
-	/**
101
-	 * Adds parameters.
102
-	 * 
103
-	 * @param  array  $parameters
104
-	 * 
105
-	 * @return void
106
-	 */
107
-	public function add(array $parameters = []): void
108
-	{
109
-		$this->parameters = array_replace($this->parameters, $parameters);
110
-	}
111
-
112
-	/**
113
-	 * Get a parameter array item.
114
-	 *
115
-	 * @param  string  $key
116
-	 * @param  mixed  $default  
117
-	 *
118
-	 * @return mixed
119
-	 */
120
-	public function get(string $key, mixed $default = null): mixed
121
-	{
122
-		return $this->has($key) ? $this->parameters[$key] : $default;
123
-	}
124
-
125
-	/**
126
-	 * Check if a parameter array item exists.
127
-	 *
128
-	 * @param  string  $key
129
-	 *
130
-	 * @return bool
131
-	 */
132
-	public function has(string $key): bool
133
-	{
134
-		return Arr::exists($this->parameters, $key);
135
-	}
136
-
137
-	/**
138
-	 * Set a parameter array item.
139
-	 *
140
-	 * @param  string  $key
141
-	 * @param  string  $value 
142
-	 *
143
-	 * @return void
144
-	 */
145
-	public function set(string $key, $value): void
146
-	{
147
-		$this->parameters[$key] = $value;
148
-	}
149
-
150
-	/**
151
-	 * Remove a parameter array item.
152
-	 *
153
-	 * @param  string  $key 
154
-	 *
155
-	 * @return void
156
-	 */
157
-	public function remove(string $key): void
158
-	{
159
-		unset($this->parameters[$key]);
160
-	}
161
-
162
-	/*
37
+    /**
38
+     * Array parameters from the Server global.
39
+     *
40
+     * @var array $parameters
41
+     */
42
+    protected $parameters;
43
+
44
+    /**
45
+     * Parameter Object Constructor.
46
+     *
47
+     * @param  array  $parameters
48
+     *
49
+     * @return array
50
+     */
51
+    public function __construct(array $parameters = [])
52
+    {
53
+        $this->parameters = $parameters;
54
+    }
55
+
56
+    /**
57
+     * Returns the parameters.
58
+     * 
59
+     * @param  string|null  $key
60
+     * 
61
+     * @return array
62
+     */
63
+    public function all(string $key = null): array
64
+    {
65
+        if (null === $key) {
66
+            return $this->parameters;
67
+        }
68
+
69
+        if ( ! is_array($value = $this->parameters[$key] ?? [])) {
70
+            throw new BadRequestException(
71
+                sprintf('Unexpected value for parameter "%s", got "%s"', $key, get_debug_type($value))
72
+            );
73
+        }
74
+
75
+        return $value;
76
+    }
77
+
78
+    /**
79
+     * Returns the parameter keys.
80
+     * 
81
+     * @return array
82
+     */
83
+    public function keys(): array
84
+    {
85
+        return array_keys($this->parameters);
86
+    }
87
+
88
+    /**
89
+     * Replaces the current parameters.
90
+     * 
91
+     * @param  array  $parameters
92
+     * 
93
+     * @return void
94
+     */
95
+    public function replace(array $parameters = []): void
96
+    {
97
+        $this->parameters = $parameters;
98
+    }
99
+
100
+    /**
101
+     * Adds parameters.
102
+     * 
103
+     * @param  array  $parameters
104
+     * 
105
+     * @return void
106
+     */
107
+    public function add(array $parameters = []): void
108
+    {
109
+        $this->parameters = array_replace($this->parameters, $parameters);
110
+    }
111
+
112
+    /**
113
+     * Get a parameter array item.
114
+     *
115
+     * @param  string  $key
116
+     * @param  mixed  $default  
117
+     *
118
+     * @return mixed
119
+     */
120
+    public function get(string $key, mixed $default = null): mixed
121
+    {
122
+        return $this->has($key) ? $this->parameters[$key] : $default;
123
+    }
124
+
125
+    /**
126
+     * Check if a parameter array item exists.
127
+     *
128
+     * @param  string  $key
129
+     *
130
+     * @return bool
131
+     */
132
+    public function has(string $key): bool
133
+    {
134
+        return Arr::exists($this->parameters, $key);
135
+    }
136
+
137
+    /**
138
+     * Set a parameter array item.
139
+     *
140
+     * @param  string  $key
141
+     * @param  string  $value 
142
+     *
143
+     * @return void
144
+     */
145
+    public function set(string $key, $value): void
146
+    {
147
+        $this->parameters[$key] = $value;
148
+    }
149
+
150
+    /**
151
+     * Remove a parameter array item.
152
+     *
153
+     * @param  string  $key 
154
+     *
155
+     * @return void
156
+     */
157
+    public function remove(string $key): void
158
+    {
159
+        unset($this->parameters[$key]);
160
+    }
161
+
162
+    /*
163 163
 	|-----------------------------------------------------------------
164 164
 	| IteratorAggregate Method
165 165
 	|-----------------------------------------------------------------
166 166
 	*/
167 167
 	
168
-	/**
169
-	 * Retrieve an external iterator.
170
-	 * 
171
-	 * @return \ArrayIterator
172
-	 */
173
-	public function getIterator(): Traversable
174
-	{
175
-		return new ArrayIterator($this->parameters);
176
-	}
168
+    /**
169
+     * Retrieve an external iterator.
170
+     * 
171
+     * @return \ArrayIterator
172
+     */
173
+    public function getIterator(): Traversable
174
+    {
175
+        return new ArrayIterator($this->parameters);
176
+    }
177 177
 	
178
-	/*
178
+    /*
179 179
 	|-----------------------------------------------------------------
180 180
 	| Countable Method
181 181
 	|-----------------------------------------------------------------
182 182
 	*/
183 183
 	
184
-	/**
185
-	 * Returns the number of parameters.
186
-	 * 
187
-	 * @return int The number of parameters
188
-	 */
189
-	public function count(): int
190
-	{
191
-		return count($this->parameters);
192
-	}
184
+    /**
185
+     * Returns the number of parameters.
186
+     * 
187
+     * @return int The number of parameters
188
+     */
189
+    public function count(): int
190
+    {
191
+        return count($this->parameters);
192
+    }
193 193
 }
194 194
\ No newline at end of file
Please login to merge, or discard this patch.
src/components/Http/Loaders/Inputs.php 2 patches
Indentation   +59 added lines, -59 removed lines patch added patch discarded remove patch
@@ -30,70 +30,70 @@
 block discarded – undo
30 30
  */
31 31
 final class Inputs extends Parameters
32 32
 {
33
-	/**
34
-	 * Replaces the current parameters.
35
-	 * 
36
-	 * @param  array  $parameters
37
-	 * 
38
-	 * @return void
39
-	 */
40
-	public function replace(array $inputs = []): void
41
-	{
42
-		$this->parameters = [];
43
-		$this->add($inputs);
44
-	}
33
+    /**
34
+     * Replaces the current parameters.
35
+     * 
36
+     * @param  array  $parameters
37
+     * 
38
+     * @return void
39
+     */
40
+    public function replace(array $inputs = []): void
41
+    {
42
+        $this->parameters = [];
43
+        $this->add($inputs);
44
+    }
45 45
 	
46
-	/**
47
-	 * Adds parameters.
48
-	 * 
49
-	 * @param  array  $parameters
50
-	 * 
51
-	 * @return void
52
-	 */
53
-	public function add(array $inputs = []): void
54
-	{
55
-		foreach ($inputs as $input => $file) {
56
-			$this->set($input, $file);
57
-		}
58
-	}
46
+    /**
47
+     * Adds parameters.
48
+     * 
49
+     * @param  array  $parameters
50
+     * 
51
+     * @return void
52
+     */
53
+    public function add(array $inputs = []): void
54
+    {
55
+        foreach ($inputs as $input => $file) {
56
+            $this->set($input, $file);
57
+        }
58
+    }
59 59
 	
60
-	/**
61
-	 * Gets a string input value by name.
62
-	 * 
63
-	 * @param  string  $key
64
-	 * @param  mixed  $default  
65
-	 * 
66
-	 * @return string|int|float|bool|null
67
-	 */
68
-	public function get(string $key, mixed $default = null): string|int|float|bool|null
69
-	{
70
-		if (null !== $default && ! is_scalar($default) && ! method_exists($default, '__toString')) {
71
-			throw new BadRequestHttpException(sprintf('Passing a non-string value as 2nd argument to "%s()" is deprecated, pass a string or null instead', __METHOD__));
72
-		}
60
+    /**
61
+     * Gets a string input value by name.
62
+     * 
63
+     * @param  string  $key
64
+     * @param  mixed  $default  
65
+     * 
66
+     * @return string|int|float|bool|null
67
+     */
68
+    public function get(string $key, mixed $default = null): string|int|float|bool|null
69
+    {
70
+        if (null !== $default && ! is_scalar($default) && ! method_exists($default, '__toString')) {
71
+            throw new BadRequestHttpException(sprintf('Passing a non-string value as 2nd argument to "%s()" is deprecated, pass a string or null instead', __METHOD__));
72
+        }
73 73
 		
74
-		$value = parent::get($key, $this);
74
+        $value = parent::get($key, $this);
75 75
 		
76
-		if (null !== $value && $this !== $value && ! is_scalar($value) && ! method_exists($value, '__toString')) {
77
-			throw new BadRequestHttpException(sprintf('Retrieving a non-string value from "%s()" is deprecated, and will throw a exception in Syscodes, use "%s::all($key)" instead', __METHOD__, __CLASS__));
78
-		}
76
+        if (null !== $value && $this !== $value && ! is_scalar($value) && ! method_exists($value, '__toString')) {
77
+            throw new BadRequestHttpException(sprintf('Retrieving a non-string value from "%s()" is deprecated, and will throw a exception in Syscodes, use "%s::all($key)" instead', __METHOD__, __CLASS__));
78
+        }
79 79
 		
80
-		return $this === $value ? $default : $value;
81
-	}
80
+        return $this === $value ? $default : $value;
81
+    }
82 82
 	
83
-	/**
84
-	 * Sets an input by name.
85
-	 * 
86
-	 * @param  string  $key
87
-	 * @param  mixed  $value
88
-	 * 
89
-	 * @return void
90
-	 */
91
-	public function set(string $key, mixed $value): void
92
-	{
93
-		if (null !== $value && ! is_scalar($value) && ! is_array($value) && ! method_exists($value, '__toString')) {
94
-			throw new BadRequestHttpException(sprintf('Passing "%s" as a 2nd Argument to "%s()" is deprecated, pass a string, array, or null instead', get_debug_type($value), __METHOD__));
95
-		}
83
+    /**
84
+     * Sets an input by name.
85
+     * 
86
+     * @param  string  $key
87
+     * @param  mixed  $value
88
+     * 
89
+     * @return void
90
+     */
91
+    public function set(string $key, mixed $value): void
92
+    {
93
+        if (null !== $value && ! is_scalar($value) && ! is_array($value) && ! method_exists($value, '__toString')) {
94
+            throw new BadRequestHttpException(sprintf('Passing "%s" as a 2nd Argument to "%s()" is deprecated, pass a string, array, or null instead', get_debug_type($value), __METHOD__));
95
+        }
96 96
 		
97
-		$this->parameters[$key] = $value;
98
-	}
97
+        $this->parameters[$key] = $value;
98
+    }
99 99
 }
100 100
\ No newline at end of file
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -65,7 +65,7 @@
 block discarded – undo
65 65
 	 * 
66 66
 	 * @return string|int|float|bool|null
67 67
 	 */
68
-	public function get(string $key, mixed $default = null): string|int|float|bool|null
68
+	public function get(string $key, mixed $default = null): string | int | float | bool | null
69 69
 	{
70 70
 		if (null !== $default && ! is_scalar($default) && ! method_exists($default, '__toString')) {
71 71
 			throw new BadRequestHttpException(sprintf('Passing a non-string value as 2nd argument to "%s()" is deprecated, pass a string or null instead', __METHOD__));
Please login to merge, or discard this patch.
src/components/Http/Loaders/Files.php 1 patch
Indentation   +20 added lines, -20 removed lines patch added patch discarded remove patch
@@ -40,29 +40,29 @@
 block discarded – undo
40 40
     }
41 41
 
42 42
     /**
43
-	 * Replaces the current parameters.
44
-	 * 
45
-	 * @param  array  $parameters
46
-	 * 
47
-	 * @return void
48
-	 */
49
-	public function replace(array $files = []): void
50
-	{
51
-		$this->parameters = [];
43
+     * Replaces the current parameters.
44
+     * 
45
+     * @param  array  $parameters
46
+     * 
47
+     * @return void
48
+     */
49
+    public function replace(array $files = []): void
50
+    {
51
+        $this->parameters = [];
52 52
         $this->add($files);
53
-	}
53
+    }
54 54
 
55
-	/**
56
-	 * Adds parameters.
57
-	 * 
58
-	 * @param  array  $parameters
59
-	 * 
60
-	 * @return void
61
-	 */
62
-	public function add(array $files = []): void
63
-	{
55
+    /**
56
+     * Adds parameters.
57
+     * 
58
+     * @param  array  $parameters
59
+     * 
60
+     * @return void
61
+     */
62
+    public function add(array $files = []): void
63
+    {
64 64
         foreach ($files as $key => $file) {
65 65
             $this->set($key, $file);
66 66
         }
67
-	}
67
+    }
68 68
 }
69 69
\ No newline at end of file
Please login to merge, or discard this patch.
src/components/Http/Loaders/Headers.php 1 patch
Indentation   +227 added lines, -227 removed lines patch added patch discarded remove patch
@@ -35,266 +35,266 @@
 block discarded – undo
35 35
  */
36 36
 class Headers implements IteratorAggregate, Countable
37 37
 {
38
-	protected const STRING_UPPER = '_ABCDEFGHIJKLMNOPQRSTUVWXYZ';
39
-	protected const STRING_LOWER = '-abcdefghijklmnopqrstuvwxyz';
38
+    protected const STRING_UPPER = '_ABCDEFGHIJKLMNOPQRSTUVWXYZ';
39
+    protected const STRING_LOWER = '-abcdefghijklmnopqrstuvwxyz';
40 40
 
41
-	/**
42
-	 * An array of HTTP headers.
43
-	 * 
44
-	 * @var array $herders
45
-	 */
46
-	protected $headers = [];
41
+    /**
42
+     * An array of HTTP headers.
43
+     * 
44
+     * @var array $herders
45
+     */
46
+    protected $headers = [];
47 47
 	
48
-	/**
49
-	 * Specifies the directives for the caching mechanisms in both
50
-	 * the requests and the responses.
51
-	 * 
52
-	 * @var array $cacheControl
53
-	 */
54
-	protected $cacheControl = [];
48
+    /**
49
+     * Specifies the directives for the caching mechanisms in both
50
+     * the requests and the responses.
51
+     * 
52
+     * @var array $cacheControl
53
+     */
54
+    protected $cacheControl = [];
55 55
 	
56
-	/**
57
-	 * Constructor. The Headers class instance.
58
-	 * 
59
-	 * @param  array  $headers
60
-	 * 
61
-	 * @return void
62
-	 */
63
-	public function __construct(array $headers = [])
64
-	{
65
-		foreach ($headers as $key => $values) {
66
-			$this->set($key, $values);
67
-		}
68
-	}
56
+    /**
57
+     * Constructor. The Headers class instance.
58
+     * 
59
+     * @param  array  $headers
60
+     * 
61
+     * @return void
62
+     */
63
+    public function __construct(array $headers = [])
64
+    {
65
+        foreach ($headers as $key => $values) {
66
+            $this->set($key, $values);
67
+        }
68
+    }
69 69
 	
70
-	/**
71
-	 * Returns all the headers.
72
-	 * 
73
-	 * @param  string|null  $key  The name of the headers
74
-	 * 
75
-	 * @return array
76
-	 */
77
-	public function all(string $key = null): array
78
-	{
79
-		if (null !== $key) {
80
-			return $this->headers[strtr($key, self::STRING_UPPER, self::STRING_LOWER)] ?? [];
81
-		}
70
+    /**
71
+     * Returns all the headers.
72
+     * 
73
+     * @param  string|null  $key  The name of the headers
74
+     * 
75
+     * @return array
76
+     */
77
+    public function all(string $key = null): array
78
+    {
79
+        if (null !== $key) {
80
+            return $this->headers[strtr($key, self::STRING_UPPER, self::STRING_LOWER)] ?? [];
81
+        }
82 82
 
83
-		return $this->headers;
84
-	}
83
+        return $this->headers;
84
+    }
85 85
 	
86
-	/**
87
-	 * Returns the parameter keys.
88
-	 * 
89
-	 * @return array An array of parameter keys
90
-	 */
91
-	public function keys(): array
92
-	{
93
-		return array_keys($this->all());
94
-	}
86
+    /**
87
+     * Returns the parameter keys.
88
+     * 
89
+     * @return array An array of parameter keys
90
+     */
91
+    public function keys(): array
92
+    {
93
+        return array_keys($this->all());
94
+    }
95 95
 	
96
-	/**
97
-	 * Replaces the current HTTP headers by a new set.
98
-	 * 
99
-	 * @param  array  $headers
100
-	 * 
101
-	 * @return void
102
-	 */
103
-	public function replace(array $headers = []): void
104
-	{
105
-		$this->headers = [];
106
-		$this->add($headers);
107
-	}
96
+    /**
97
+     * Replaces the current HTTP headers by a new set.
98
+     * 
99
+     * @param  array  $headers
100
+     * 
101
+     * @return void
102
+     */
103
+    public function replace(array $headers = []): void
104
+    {
105
+        $this->headers = [];
106
+        $this->add($headers);
107
+    }
108 108
 	
109
-	/**
110
-	 * Adds multiple header to the queue.
111
-	 * 
112
-	 * @param  array  $headers  The header name
113
-	 * 
114
-	 * @return mixed
115
-	 */
116
-	public function add(array $headers = [])
117
-	{
118
-		foreach ($headers as $key => $values) {
119
-			$this->set($key, $values);
120
-		}
121
-	}
109
+    /**
110
+     * Adds multiple header to the queue.
111
+     * 
112
+     * @param  array  $headers  The header name
113
+     * 
114
+     * @return mixed
115
+     */
116
+    public function add(array $headers = [])
117
+    {
118
+        foreach ($headers as $key => $values) {
119
+            $this->set($key, $values);
120
+        }
121
+    }
122 122
 	
123
-	/**
124
-	 * Gets a header value by name.
125
-	 *
126
-	 * @param  string  $key  The header name, or null for all headers
127
-	 * @param  string|null  $default  The default value
128
-	 *
129
-	 * @return mixed
130
-	 */
131
-	public function get(string $key, string $default = null): ?string
132
-	{
133
-		$headers = $this->all($key);
123
+    /**
124
+     * Gets a header value by name.
125
+     *
126
+     * @param  string  $key  The header name, or null for all headers
127
+     * @param  string|null  $default  The default value
128
+     *
129
+     * @return mixed
130
+     */
131
+    public function get(string $key, string $default = null): ?string
132
+    {
133
+        $headers = $this->all($key);
134 134
 		
135
-		if ( ! $headers) {
136
-			return $default;
137
-		}
135
+        if ( ! $headers) {
136
+            return $default;
137
+        }
138 138
 		
139
-		if (null === $headers[0]) {
140
-			return null;
141
-		}
139
+        if (null === $headers[0]) {
140
+            return null;
141
+        }
142 142
 		
143
-		return (string) $headers[0];
144
-	}
143
+        return (string) $headers[0];
144
+    }
145 145
 
146
-	/**
147
-	 * Sets a header by name.
148
-	 * 
149
-	 * @param  string  $key  The header name
150
-	 * @param  string|string[]|null  $values  The value or an array of values
151
-	 * @param  bool  $replace  If you want to replace the value exists by the header, 
152
-	 * 					       it is not overwritten / overwritten when it is false
153
-	 *
154
-	 * @return void
155
-	 */
156
-	public function set(string $key, $values, bool $replace = true): void
157
-	{
158
-		$key = strtr($key, self::STRING_UPPER, self::STRING_LOWER);
146
+    /**
147
+     * Sets a header by name.
148
+     * 
149
+     * @param  string  $key  The header name
150
+     * @param  string|string[]|null  $values  The value or an array of values
151
+     * @param  bool  $replace  If you want to replace the value exists by the header, 
152
+     * 					       it is not overwritten / overwritten when it is false
153
+     *
154
+     * @return void
155
+     */
156
+    public function set(string $key, $values, bool $replace = true): void
157
+    {
158
+        $key = strtr($key, self::STRING_UPPER, self::STRING_LOWER);
159 159
 
160
-		if (is_array($values)) {
161
-			$values = array_values($values);
160
+        if (is_array($values)) {
161
+            $values = array_values($values);
162 162
 
163
-			if (true === $replace || ! isset($this->headers[$key])) {
164
-				$this->headers[$key] = $values;
165
-			} else {
166
-				$this->headers[$key] = array_merge($this->headers[$key], $values);
167
-			}
168
-		} else {
169
-			if (true === $replace || ! isset($this->headers[$key])) {
170
-				$this->headers[$key] = [$values];
171
-			} else {
172
-				$this->headers[$key][] = $values;
173
-			}
174
-		}
163
+            if (true === $replace || ! isset($this->headers[$key])) {
164
+                $this->headers[$key] = $values;
165
+            } else {
166
+                $this->headers[$key] = array_merge($this->headers[$key], $values);
167
+            }
168
+        } else {
169
+            if (true === $replace || ! isset($this->headers[$key])) {
170
+                $this->headers[$key] = [$values];
171
+            } else {
172
+                $this->headers[$key][] = $values;
173
+            }
174
+        }
175 175
 		
176
-		if ('cache-control' === $key) {
177
-			$this->cacheControl = $this->parseCacheControl(implode(', ', $this->headers[$key]));
178
-		}
179
-	}
176
+        if ('cache-control' === $key) {
177
+            $this->cacheControl = $this->parseCacheControl(implode(', ', $this->headers[$key]));
178
+        }
179
+    }
180 180
 
181
-	/**
182
-	 * Returns true if the HTTP header is defined.
183
-	 * 
184
-	 * @param  string  $key  The HTTP header
185
-	 * 
186
-	 * @return bool  true if the parameter exists, false otherwise
187
-	 */
188
-	public function has(string $key): bool
189
-	{
190
-		return array_key_exists(strtr($key, self::STRING_UPPER, self::STRING_LOWER), $this->all());
191
-	}
181
+    /**
182
+     * Returns true if the HTTP header is defined.
183
+     * 
184
+     * @param  string  $key  The HTTP header
185
+     * 
186
+     * @return bool  true if the parameter exists, false otherwise
187
+     */
188
+    public function has(string $key): bool
189
+    {
190
+        return array_key_exists(strtr($key, self::STRING_UPPER, self::STRING_LOWER), $this->all());
191
+    }
192 192
 
193
-	/**
194
-	 * Removes a header.
195
-	 * 
196
-	 * @param  string  $name  The header name
197
-	 * 
198
-	 * @return mixed
199
-	 */
200
-	public function remove(string $key)
201
-	{
202
-		$key = strtr($key, self::STRING_UPPER, self::STRING_LOWER);
193
+    /**
194
+     * Removes a header.
195
+     * 
196
+     * @param  string  $name  The header name
197
+     * 
198
+     * @return mixed
199
+     */
200
+    public function remove(string $key)
201
+    {
202
+        $key = strtr($key, self::STRING_UPPER, self::STRING_LOWER);
203 203
 
204
-		unset($this->headers[$key]);
204
+        unset($this->headers[$key]);
205 205
 
206
-		if ('cache-control' === $key) {
207
-			$this->cacheControl = [];
208
-		}
209
-	}
206
+        if ('cache-control' === $key) {
207
+            $this->cacheControl = [];
208
+        }
209
+    }
210 210
 	
211
-	/**
212
-	 * Returns the HTTP header value converted to a date.
213
-	 * 
214
-	 * @param  string  $key
215
-	 * @param  DateTime|null  $default
216
-	 * 
217
-	 * @throws \RuntimeException When the HTTP header is not parseable
218
-	 */
219
-	public function getDate(string $key, DateTime $default = null): ?DateTimeInterface
220
-	{
221
-		if (null === $value = $this->get($key)) {
222
-			return $default;
223
-		}
211
+    /**
212
+     * Returns the HTTP header value converted to a date.
213
+     * 
214
+     * @param  string  $key
215
+     * @param  DateTime|null  $default
216
+     * 
217
+     * @throws \RuntimeException When the HTTP header is not parseable
218
+     */
219
+    public function getDate(string $key, DateTime $default = null): ?DateTimeInterface
220
+    {
221
+        if (null === $value = $this->get($key)) {
222
+            return $default;
223
+        }
224 224
 		
225
-		if (false === $date = DateTime::createFromFormat(DATE_RFC2822, $value)) {
226
-			throw new RuntimeException(sprintf('The "%s" HTTP header is not parseable (%s).', $key, $value));
227
-		}
225
+        if (false === $date = DateTime::createFromFormat(DATE_RFC2822, $value)) {
226
+            throw new RuntimeException(sprintf('The "%s" HTTP header is not parseable (%s).', $key, $value));
227
+        }
228 228
 		
229
-		return $date;
230
-	}
229
+        return $date;
230
+    }
231 231
 	
232
-	/**
233
-	 * Returns an iterator for headers.
234
-	 * 
235
-	 * @return \ArrayIterator An \ArrayIterator instance
236
-	 */
237
-	public function getIterator(): Traversable
238
-	{
239
-		return new ArrayIterator($this->headers);
240
-	}
232
+    /**
233
+     * Returns an iterator for headers.
234
+     * 
235
+     * @return \ArrayIterator An \ArrayIterator instance
236
+     */
237
+    public function getIterator(): Traversable
238
+    {
239
+        return new ArrayIterator($this->headers);
240
+    }
241 241
 	
242
-	/**
243
-	 * Returns the number of headers.
244
-	 * 
245
-	 * @return int The number of headers
246
-	 */
247
-	public function count(): int
248
-	{
249
-		return count($this->headers);
250
-	}
242
+    /**
243
+     * Returns the number of headers.
244
+     * 
245
+     * @return int The number of headers
246
+     */
247
+    public function count(): int
248
+    {
249
+        return count($this->headers);
250
+    }
251 251
 	
252
-	/**
253
-	 * Parses a Cache-Control HTTP header.
254
-	 * 
255
-	 * @param string $header The value of the Cache-Control HTTP header
256
-	 * 
257
-	 * @return array An array representing the attribute values
258
-	 */
259
-	protected function parseCacheControl($header): array
260
-	{
261
-		$cacheControl = [];
252
+    /**
253
+     * Parses a Cache-Control HTTP header.
254
+     * 
255
+     * @param string $header The value of the Cache-Control HTTP header
256
+     * 
257
+     * @return array An array representing the attribute values
258
+     */
259
+    protected function parseCacheControl($header): array
260
+    {
261
+        $cacheControl = [];
262 262
 		
263
-		preg_match_all('~([a-zA-Z][a-zA-Z_-]*)\s*(?:=(?:"([^"]*)"|([^ \t",;]*)))?~', $header, $matches, PREG_SET_ORDER);
263
+        preg_match_all('~([a-zA-Z][a-zA-Z_-]*)\s*(?:=(?:"([^"]*)"|([^ \t",;]*)))?~', $header, $matches, PREG_SET_ORDER);
264 264
 		
265
-		foreach ($matches as $match) {
266
-			$cacheControl[strtolower($match[1])] = isset($match[3]) ? $match[3] : (isset($match[2]) ? $match[2] : true);
267
-		}
265
+        foreach ($matches as $match) {
266
+            $cacheControl[strtolower($match[1])] = isset($match[3]) ? $match[3] : (isset($match[2]) ? $match[2] : true);
267
+        }
268 268
 		
269
-		return $cacheControl;
270
-	}
269
+        return $cacheControl;
270
+    }
271 271
 	
272
-	/**
273
-	 * Magic method.
274
-	 * 
275
-	 * Returns the headers as a string.
276
-	 * 
277
-	 * @return string The headers
278
-	 */
279
-	public function __toString(): string
280
-	{
281
-		if ( ! $headers = $this->all()) {
282
-			return '';
283
-		}
272
+    /**
273
+     * Magic method.
274
+     * 
275
+     * Returns the headers as a string.
276
+     * 
277
+     * @return string The headers
278
+     */
279
+    public function __toString(): string
280
+    {
281
+        if ( ! $headers = $this->all()) {
282
+            return '';
283
+        }
284 284
 		
285
-		ksort($headers);
285
+        ksort($headers);
286 286
 		
287
-		$max     = max(array_map('strlen', array_keys($headers))) + 1;
288
-		$content = '';
287
+        $max     = max(array_map('strlen', array_keys($headers))) + 1;
288
+        $content = '';
289 289
 		
290
-		foreach ($headers as $name => $values) {
291
-			$name = ucwords($name, '-');
290
+        foreach ($headers as $name => $values) {
291
+            $name = ucwords($name, '-');
292 292
 			
293
-			foreach ($values as $value) {
294
-				$content .= sprintf("%-{$max}s %s\r\n", $name.':', $value);
295
-			}
296
-		}
293
+            foreach ($values as $value) {
294
+                $content .= sprintf("%-{$max}s %s\r\n", $name.':', $value);
295
+            }
296
+        }
297 297
 
298
-		return $content;
299
-	}
298
+        return $content;
299
+    }
300 300
 }
301 301
\ No newline at end of file
Please login to merge, or discard this patch.