cakephp3-bootstrap-helpers icon indicating copy to clipboard operation
cakephp3-bootstrap-helpers copied to clipboard

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

Open Erwane opened this issue 6 years ago • 3 comments

This is a (multiple allowed):

  • [x] bug

  • [ ] enhancement

  • [ ] question

  • CakePHP Version: 3.8.0

  • Plugin Version/Branch: holt59/cakephp3-bootstrap-helpers dev-4.0.1-alpha 00ba937

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 avatar Jul 09 '19 15:07 Erwane

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

Erwane avatar Jul 09 '19 16:07 Erwane

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?

Holt59 avatar Oct 15 '19 12:10 Holt59

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

Erwane avatar Oct 15 '19 12:10 Erwane