cakephp3-bootstrap-helpers
                                
                                 cakephp3-bootstrap-helpers copied to clipboard
                                
                                    cakephp3-bootstrap-helpers copied to clipboard
                            
                            
                            
                        _normalize is wrong when a page is attached to default route
This is a (multiple allowed):
- 
[x] bug 
- 
[ ] enhancement 
- 
[x] question 
- 
CakePHP Version: 3.5.14 
- 
Plugin Version/Branch: COMPOSER REQUIREMENTS (e.g. dev-master,dev-4.0.1-alpha,3.1.*).
What you did
I have a route attached to a page called 'dashboard'
$routes->connect('/', ['controller' => 'Pages', 'action' => 'display', 'dashboard']);
So, using the Navbar help I've created a link like this:
$this->Navbar->link('Dashboard', ['controller' => 'Pages', 'action' => 'display', 'dashboard'])
And the generated link is '/' since its routed that way.
In another page, '/home', (pages/display/home) the link '/' is marked as 'active' and this is wrong.
How can I check the current page properly?
What happened
I got the root page active even on another page. Normalize functions seems not work properly when the URL is attached to '/' route.
What you expected to happen
Normalize should check the URL in routes and consider it.
So, I'm running more tests here and there are more details I can add here:
I have this route
$routes->connect('/', ['controller' => 'Pages', 'action' => 'display', 'dashboard']);
so my mysite.dev/ is conected to my dashboard page
And I have added this link in my Navbar
$this->Navbar->link('Dashboard', ['controller' => 'Pages', 'action' => 'display', 'dashboard'])
When opening another page, ie: mysite.dev/about
the compareUrls() will compare '/' (my dashboard page) with the current page '/about'
Then, the normalize() will come up with the wrong structure for the '/' url.
'pass' => [
	(int) 0 => 'about'
],
'controller' => 'Pages',
'action' => 'display',
'plugin' => null,
'_matchedRoute' => '/pages/*'
Note the pass parameter wrong. It should be dashboard and not the current page about.
I think the line
$url = Router::parseRequest(new ServerRequest($this->_removeRelative($url)));
is not parsing the root route right.
If I remove the route in my routes.php this thing doesn't happen and the normalized version for it is:
'pass' => [
	(int) 0 => 'dashboard'
],
'controller' => 'Pages',
'action' => 'display',
'plugin' => null,
'_matchedRoute' => '/pages/*'
Check the pass parameter changing.