CakePHP-Bootstrap / cakephp3-bootstrap-helpers

CakePHP 3.x Helpers for Bootstrap 3 and 4.
https://holt59.github.io/cakephp3-bootstrap-helpers/
MIT License
130 stars 79 forks source link

UrlComparerTrait : route not found when menu is get only and submit a form #179

Open Erwane opened 5 years ago

Erwane commented 5 years ago

This is a (multiple allowed):

What you did

if ($this->Navbar->compareUrls(['_name' => 'route.name'])) {
    // code
}

What happened

Thrown a route not found exception

What you expected to happen

find the route ;)

explanation

my route is a get only : $routes->get('/queue', ['controller' => 'Emails', 'action' => 'queue'], 'route.name'); and is in the "top menu"

When i submit a form (POST, PATCH, PUT), the UrlComparerTrait create a Request with normalized url : $url = Router::parseRequest(new ServerRequest($this->_removeRelative($url))); But this request construction use the current environment and set the method to POST. The route.name with POST method don't exists.

Erwane commented 5 years ago

I'm not sure about this, but this PR fix my problem ;)

Holt59 commented 4 years ago

To clarify a bit, the issue occurs when you have an URL that can be respond to both GET and POST request, and you have a GET "version" in the navigation bar?

Erwane commented 4 years ago

The issue occur when you have a GET only route, used in navbar, but you do a POST or PUT on form with error (no redirect).

The request is POST and the navbar route only exist in GET, this thrown a Route Not Found

As i said in PR, maybe we can check and compare only route who match the current method