Extend domain filter to support fixed subdomain and domain parameter

This commit is contained in:
Stefan Warnat
2021-10-04 01:49:42 +02:00
parent 9fa7ad3e91
commit 5268a998ff
2 changed files with 68 additions and 3 deletions
+4 -3
View File
@@ -123,7 +123,8 @@ abstract class Route implements IRoute
); );
// Ensures that host names/domains will work with parameters // Ensures that host names/domains will work with parameters
$url = '/' . ltrim($url, '/');
if($route[0] == '{') $url = '/' . ltrim($url, '/');
$urlRegex = ''; $urlRegex = '';
$parameters = []; $parameters = [];
@@ -131,7 +132,7 @@ abstract class Route implements IRoute
$urlRegex = preg_quote($route, '/'); $urlRegex = preg_quote($route, '/');
} else { } else {
foreach (preg_split('/((-?\/?){[^}]+})/', $route) as $key => $t) { foreach (preg_split('/((\.?-?\/?){[^}]+})/', $route) as $key => $t) {
$regex = ''; $regex = '';
@@ -146,7 +147,7 @@ abstract class Route implements IRoute
$regex = $parameterRegex ?? $this->defaultParameterRegex ?? static::PARAMETERS_DEFAULT_REGEX; $regex = $parameterRegex ?? $this->defaultParameterRegex ?? static::PARAMETERS_DEFAULT_REGEX;
} }
$regex = sprintf('((\/|-)(?P<%2$s>%3$s))%1$s', $parameters[2][$key], $name, $regex); $regex = sprintf('((\/|-|\.)(?P<%2$s>%3$s))%1$s', $parameters[2][$key], $name, $regex);
} }
$urlRegex .= preg_quote($t, '/') . $regex; $urlRegex .= preg_quote($t, '/') . $regex;
@@ -179,6 +179,70 @@ class RouterRouteTest extends \PHPUnit\Framework\TestCase
} }
public function testFixedSubdomainDynamicDomain()
{
TestRouter::request()->setHost('other.world.com');
$result = false;
TestRouter::group(['domain' => 'other.{domain}'], function () use (&$result) {
TestRouter::get('/test', function ($domain = null) use (&$result) {
$result = true;
});
});
TestRouter::debug('/test', 'get');
$this->assertTrue($result);
}
public function testFixedSubdomainDynamicDomainParameter()
{
TestRouter::request()->setHost('other.world.com');
$result = false;
TestRouter::group(['domain' => 'other.{domain}'], function () use (&$result) {
TestRouter::get('/test', 'DummyController@param');
TestRouter::get('/test/{key}', 'DummyController@param');
});
$response = TestRouter::debugOutputnoReset('/test', 'get');
$this->assertEquals('world.com', $response);
$response = TestRouter::debugOutput('/test/unittest', 'get');
$this->assertEquals('unittest, world.com', $response);
}
public function testWrongFixedSubdomainDynamicDomain()
{
TestRouter::request()->setHost('wrong.world.com');
$result = false;
TestRouter::group(['domain' => 'other.{domain}'], function () use (&$result) {
TestRouter::get('/test', function ($domain = null) use (&$result) {
$result = true;
});
});
try {
TestRouter::debug('/test', 'get');
} catch(\Exception $e) {
}
$this->assertFalse($result);
}
public function testRegEx() public function testRegEx()
{ {
TestRouter::get('/my/{path}', 'DummyController@method1')->where(['path' => '[a-zA-Z-]+']); TestRouter::get('/my/{path}', 'DummyController@method1')->where(['path' => '[a-zA-Z-]+']);