1 | <?php |
||
17 | class Url implements UrlContract |
||
18 | { |
||
19 | /* ----------------------------------------------------------------- |
||
20 | | Main Methods |
||
21 | | ----------------------------------------------------------------- |
||
22 | */ |
||
23 | |||
24 | /** |
||
25 | * Extract attributes for current url. |
||
26 | * |
||
27 | * @param bool|false|string $url |
||
28 | * |
||
29 | * @return array |
||
30 | */ |
||
31 | 318 | public static function extractAttributes($url = false) |
|
32 | { |
||
33 | 318 | $parse = parse_url((string) $url); |
|
34 | 318 | $path = isset($parse['path']) ? explode('/', $parse['path']) : []; |
|
35 | 318 | $url = []; |
|
36 | |||
37 | 318 | foreach ($path as $segment) { |
|
38 | 318 | if ( ! empty($segment)) |
|
39 | 318 | $url[] = $segment; |
|
40 | } |
||
41 | |||
42 | 318 | return self::extractAttributesFromRoutes($url, app('router')->getRoutes()); |
|
43 | } |
||
44 | |||
45 | /** |
||
46 | * Change uri attributes (wildcards) for the ones in the $attributes array. |
||
47 | * |
||
48 | * @param array $attributes |
||
49 | * @param string $uri |
||
50 | * |
||
51 | * @return string |
||
52 | */ |
||
53 | 330 | public static function substituteAttributes(array $attributes, $uri) |
|
65 | |||
66 | /** |
||
67 | * Build URL using array data from parse_url. |
||
68 | * |
||
69 | * @param array|false $parsed |
||
70 | * |
||
71 | * @return string |
||
72 | */ |
||
73 | 276 | public static function unparse($parsed) |
|
85 | |||
86 | /* ----------------------------------------------------------------- |
||
87 | | Extract Methods |
||
88 | | ----------------------------------------------------------------- |
||
89 | */ |
||
90 | |||
91 | /** |
||
92 | * Extract attributes from routes. |
||
93 | * |
||
94 | * @param array $url |
||
95 | * @param \Illuminate\Routing\RouteCollection $routes |
||
96 | * |
||
97 | * @return array |
||
98 | */ |
||
99 | 318 | private static function extractAttributesFromRoutes(array $url, $routes): array |
|
121 | |||
122 | /** |
||
123 | * Check if has attributes from a route. |
||
124 | * |
||
125 | * @param array $url |
||
126 | * @param string $path |
||
127 | * @param array $attributes |
||
128 | * |
||
129 | * @return bool |
||
130 | */ |
||
131 | 252 | private static function hasAttributesFromUriPath($url, $path, &$attributes): bool |
|
158 | |||
159 | /** |
||
160 | * Extract attribute from a segment. |
||
161 | * |
||
162 | * @param array $url |
||
163 | * @param array $path |
||
164 | * @param int $i |
||
165 | * @param int $j |
||
166 | * @param string $segment |
||
167 | * @param array $attributes |
||
168 | */ |
||
169 | 96 | private static function extractAttributesFromSegment($url, $path, $i, $j, $segment, &$attributes): void |
|
186 | |||
187 | /* ----------------------------------------------------------------- |
||
188 | | Other Methods |
||
189 | | ----------------------------------------------------------------- |
||
190 | */ |
||
191 | |||
192 | /** |
||
193 | * Check parsed URL. |
||
194 | * |
||
195 | * @param array $parsed |
||
196 | * |
||
197 | * @return array |
||
198 | */ |
||
199 | 276 | private static function checkParsedUrl(array $parsed): array |
|
215 | |||
216 | /** |
||
217 | * Get URL. |
||
218 | * |
||
219 | * @param array $parsed |
||
220 | * |
||
221 | * @return string |
||
222 | */ |
||
223 | 276 | private static function getUrl(array $parsed): string |
|
229 | |||
230 | /** |
||
231 | * Get hier part. |
||
232 | * |
||
233 | * @param array $parsed |
||
234 | * |
||
235 | * @return string |
||
236 | */ |
||
237 | 276 | private static function getHierPart(array $parsed): string |
|
243 | |||
244 | /** |
||
245 | * Get authority. |
||
246 | * |
||
247 | * @param array $parsed |
||
248 | * |
||
249 | * @return string |
||
250 | */ |
||
251 | 276 | private static function getAuthority(array $parsed): string |
|
257 | |||
258 | /** |
||
259 | * Get user info. |
||
260 | * |
||
261 | * @param array $parsed |
||
262 | * |
||
263 | * @return string |
||
264 | */ |
||
265 | 276 | private static function getUserInfo(array $parsed): string |
|
271 | |||
272 | /** |
||
273 | * Get host. |
||
274 | * |
||
275 | * @param array $parsed |
||
276 | * |
||
277 | * @return string |
||
278 | */ |
||
279 | 276 | private static function getHost(array $parsed): string |
|
285 | |||
286 | /** |
||
287 | * Get Query. |
||
288 | * |
||
289 | * @param array $parsed |
||
290 | * |
||
291 | * @return string |
||
292 | */ |
||
293 | 276 | private static function getQuery(array $parsed): string |
|
299 | |||
300 | /** |
||
301 | * Get fragment. |
||
302 | * |
||
303 | * @param array $parsed |
||
304 | * |
||
305 | * @return string |
||
306 | */ |
||
307 | 276 | private static function getFragment(array $parsed): string |
|
313 | } |
||
314 |