Skip to content

Commit 7dd08ba

Browse files
committed
Allow filters to return a new response or request
1 parent 3c3baff commit 7dd08ba

File tree

2 files changed

+25
-12
lines changed

2 files changed

+25
-12
lines changed

src/Proxy.php

+8-12
Original file line numberDiff line numberDiff line change
@@ -142,19 +142,17 @@ public function addResponseFilter($filter)
142142
*/
143143
protected function applyRequestFilter(Request $request)
144144
{
145-
$callback = function($filter) use ($request)
145+
foreach ($this->requestFilters as $filter)
146146
{
147147
if ($filter instanceof RequestFilterInterface)
148148
{
149-
return $filter->filter($request);
149+
$request = $filter->filter($request) ?: $request;
150150
}
151151
else if ($filter instanceof Closure)
152152
{
153-
return $filter($request);
153+
$request = $filter($request) ?: $request;
154154
}
155-
};
156-
157-
array_map($callback, $this->requestFilters);
155+
}
158156

159157
return $request;
160158
}
@@ -167,19 +165,17 @@ protected function applyRequestFilter(Request $request)
167165
*/
168166
protected function applyResponseFilter(Response $response)
169167
{
170-
$callback = function($filter) use ($response)
168+
foreach ($this->responseFilters as $filter)
171169
{
172170
if ($filter instanceof ResponseFilterInterface)
173171
{
174-
return $filter->filter($response);
172+
$response = $filter->filter($response) ?: $response;
175173
}
176174
else if ($filter instanceof Closure)
177175
{
178-
return $filter($response);
176+
$response = $filter($response) ?: $response;
179177
}
180-
};
181-
182-
array_map($callback, $this->responseFilters);
178+
}
183179

184180
return $response;
185181
}

tests/Proxy/ProxyTest.php

+17
Original file line numberDiff line numberDiff line change
@@ -159,4 +159,21 @@ public function to_applies_response_filter_closure()
159159
$this->assertTrue($executed);
160160
}
161161

162+
/**
163+
* @test
164+
*/
165+
public function to_request_filter_returns_new_request()
166+
{
167+
$replace = new Request;
168+
169+
$this->proxy->addRequestFilter(function(Request $request) use ($replace)
170+
{
171+
return $replace;
172+
});
173+
174+
$this->proxy->forward(Request::createFromGlobals())->to('/');
175+
176+
$this->assertEquals($this->proxy->getRequest(), $replace);
177+
}
178+
162179
}

0 commit comments

Comments
 (0)