@@ -25,32 +25,65 @@ public function isActive(Nav $nav)
2525
2626 protected function matchPath (Nav $ nav )
2727 {
28- $ pathPattern = trim (parse_url ($ this ->uri , PHP_URL_PATH ), '/ ' ) . '/ ' ;
29- $ navPattern = ltrim ($ nav ->getPattern (), '/ ' );
28+ $ currentPath = parse_url ($ this ->uri , PHP_URL_PATH );
3029
31- if (empty ($ navPattern )) {
32- return false ;
30+ $ match = null ;
31+
32+ foreach ($ nav ->getPattern () as $ navPattern ) {
33+ if (empty ($ navPattern )) {
34+ continue ;
35+ }
36+
37+ $ navPath = parse_url ($ navPattern , PHP_URL_PATH );
38+ $ match = strpos ($ currentPath , $ navPath ) !== false || fnmatch ($ navPath , $ currentPath );
39+
40+ if ($ match ) {
41+ break ;
42+ }
3343 }
3444
35- return strpos ( $ pathPattern , $ navPattern ) !== false || fnmatch ( $ navPattern , $ pathPattern ) ;
45+ return $ match === true ;
3646 }
3747
3848 protected function matchQuery (Nav $ nav )
3949 {
4050 $ expectedQuery = parse_url ($ this ->uri , PHP_URL_QUERY );
41- $ navQuery = parse_url ($ nav ->getPattern (), PHP_URL_QUERY );
4251
4352 parse_str ($ expectedQuery , $ expectedQuery );
44- parse_str ($ navQuery , $ navQuery );
4553
46- return empty (array_diff ($ navQuery , $ expectedQuery ));
54+ $ match = null ;
55+
56+ foreach ($ nav ->getPattern () as $ navPattern ) {
57+ $ navQuery = parse_url ($ navPattern , PHP_URL_QUERY );
58+
59+ parse_str ($ navQuery , $ navQuery );
60+
61+ $ match = empty (array_diff ($ navQuery , $ expectedQuery ));
62+
63+ if ($ match ) {
64+ break ;
65+ }
66+ }
67+
68+ return $ match === true ;
4769 }
4870
4971 protected function matchFragment (Nav $ nav )
5072 {
5173 $ expectedFragment = parse_url ($ this ->uri , PHP_URL_FRAGMENT );
52- $ navFragment = parse_url ($ nav ->getPattern (), PHP_URL_FRAGMENT );
5374
54- return $ expectedFragment === $ navFragment ;
75+ $ match = null ;
76+
77+ foreach ($ nav ->getPattern () as $ navPattern ) {
78+ $ navFragment = parse_url ($ navPattern , PHP_URL_FRAGMENT );
79+
80+ $ match = $ expectedFragment === $ navFragment ;
81+
82+ if ($ match ) {
83+ break ;
84+ }
85+ }
86+
87+ return $ match === true ;
5588 }
5689}
0 commit comments