Skip to content

Commit 1a6b764

Browse files
Fix _method HTTP param ignoring (#9)
Co-authored-by: Paramtamtam <[email protected]>
1 parent 7244e42 commit 1a6b764

File tree

4 files changed

+89
-0
lines changed

4 files changed

+89
-0
lines changed

CHANGELOG.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,22 @@ All notable changes to this project will be documented in this file.
44

55
The format is based on [Keep a Changelog][keepachangelog] and this project adheres to [Semantic Versioning][semver].
66

7+
## v3.5.0
8+
9+
### Added
10+
11+
- Listener `EnableHttpMethodParameterOverride` for forced support of `_method` request parameter (for determining the intended HTTP method) [#9]
12+
13+
### Changed
14+
15+
- Listener `EnableHttpMethodParameterOverride` is enabled by default in the configuration file [#9]
16+
17+
### Fixed
18+
19+
- Sending any form data with a `DELETE` or `PUT` method (the application ignored the hidden field `_method` and as a result the action necessary for the form did not occur) [#9]
20+
21+
[#9]:https://github.com/spiral/roadrunner-laravel/pull/9
22+
723
## v3.4.0
824

925
### Added

config/roadrunner.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@
6464
],
6565

6666
Events\BeforeLoopIterationEvent::class => [
67+
Listeners\EnableHttpMethodParameterOverride::class,
6768
Listeners\RebindHttpKernelListener::class, // Laravel 7 issue: <https://git.io/JvPpf>
6869
Listeners\RebindViewListener::class,
6970
Listeners\CloneConfigListener::class,
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Spiral\RoadRunnerLaravel\Listeners;
6+
7+
use Spiral\RoadRunnerLaravel\Events\Contracts\WithHttpRequest;
8+
9+
/**
10+
* This listener must be registered BEFORE `RebindRouterListener` if you need to process
11+
* the hidden `_hidden` field when submitted using the HTML form.
12+
*
13+
* @link https://github.com/spiral/roadrunner-laravel/pull/9
14+
* @see RebindRouterListener
15+
*/
16+
class EnableHttpMethodParameterOverride implements ListenerInterface
17+
{
18+
/**
19+
* {@inheritdoc}
20+
*/
21+
public function handle($event): void
22+
{
23+
if ($event instanceof WithHttpRequest) {
24+
$event->httpRequest()::enableHttpMethodParameterOverride();
25+
}
26+
}
27+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Spiral\RoadRunnerLaravel\Tests\Listeners;
6+
7+
use Mockery as m;
8+
use Symfony\Component\HttpFoundation\Request;
9+
use Spiral\RoadRunnerLaravel\Events\Contracts\WithHttpRequest;
10+
use Spiral\RoadRunnerLaravel\Listeners\EnableHttpMethodParameterOverride;
11+
12+
/**
13+
* @covers \Spiral\RoadRunnerLaravel\Listeners\EnableHttpMethodParameterOverride<extended>
14+
*/
15+
class EnableHttpMethodParameterOverrideTest extends AbstractListenerTestCase
16+
{
17+
/**
18+
* {@inheritdoc}
19+
*/
20+
public function testHandle(): void
21+
{
22+
$request = $this->app->make('request');
23+
24+
/** @var m\MockInterface|WithHttpRequest $event_mock */
25+
$event_mock = m::mock(WithHttpRequest::class)
26+
->makePartial()
27+
->expects('httpRequest')
28+
->andReturn($request)
29+
->getMock();
30+
31+
$this->assertFalse($request::getHttpMethodParameterOverride());
32+
33+
$this->listenerFactory()->handle($event_mock);
34+
35+
$this->assertTrue($request::getHttpMethodParameterOverride());
36+
}
37+
38+
/**
39+
* @return EnableHttpMethodParameterOverride
40+
*/
41+
protected function listenerFactory(): EnableHttpMethodParameterOverride
42+
{
43+
return new EnableHttpMethodParameterOverride();
44+
}
45+
}

0 commit comments

Comments
 (0)