new method to create shorthand name from full Controller name
This commit is contained in:
parent
6a18bfc130
commit
91ebba420a
@ -71,4 +71,26 @@ class ControllerNameParser
|
|||||||
|
|
||||||
throw new \InvalidArgumentException($msg);
|
throw new \InvalidArgumentException($msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function build($controller) {
|
||||||
|
if (2 != count($parts = explode('::', $controller))) {
|
||||||
|
throw new \InvalidArgumentException(sprintf('The "%s" controller is not a valid aController::cAction controller string.', $controller));
|
||||||
|
}
|
||||||
|
|
||||||
|
list ($className, $action) = $parts;
|
||||||
|
if (5 !== strripos($action, 'Action')) {
|
||||||
|
throw new \InvalidArgumentException(sprintf('The "%s" controller is not a valid aController::cAction controller string.', $controller));
|
||||||
|
}
|
||||||
|
$action = substr($action, 0, strlen($action) - 6);
|
||||||
|
|
||||||
|
foreach ($this->kernel->getBundles() as $bundles) {
|
||||||
|
foreach($bundles as $bundle) {
|
||||||
|
if (preg_match('/^'.preg_quote($bundle->getNamespace()).'\\\\Controller\\\\(.*)Controller/', $className, $m)) {
|
||||||
|
return sprintf('%s:%s:%s', $bundle->getName(), $m[1], $action);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new \InvalidArgumentException(sprintf('The "%s" controller is not a valid aController::cAction controller string.', $controller));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -55,6 +55,31 @@ class ControllerNameParserTest extends TestCase
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testBuild()
|
||||||
|
{
|
||||||
|
$parser = $this->createParser();
|
||||||
|
|
||||||
|
$this->assertEquals('FooBundle:Default:index', $parser->build('TestBundle\FooBundle\Controller\DefaultController::indexAction'), '->parse() converts a class::method string to a short a:b:c notation string');
|
||||||
|
$this->assertEquals('FooBundle:Sub\Default:index', $parser->build('TestBundle\FooBundle\Controller\Sub\DefaultController::indexAction'), '->parse() converts a class::method string to a short a:b:c notation string');
|
||||||
|
$this->assertEquals('FabpotFooBundle:Default:index', $parser->build('TestBundle\Fabpot\FooBundle\Controller\DefaultController::indexAction'), '->parse() converts a class::method string to a short a:b:c notation string');
|
||||||
|
$this->assertEquals('SensioCmsFooBundle:Default:index', $parser->build('TestBundle\Sensio\Cms\FooBundle\Controller\DefaultController::indexAction'), '->parse() converts a class::method string to a short a:b:c notation string');
|
||||||
|
$this->assertEquals('FooBundle:Test\\Default:index', $parser->build('TestBundle\FooBundle\Controller\Test\DefaultController::indexAction'), '->parse() converts a class::method string to a short a:b:c notation string');
|
||||||
|
|
||||||
|
try {
|
||||||
|
$parser->build('TestBundle\FooBundle\Controller\DefaultController::index');
|
||||||
|
$this->fail('->parse() throws an \InvalidArgumentException if the controller is not an aController::cAction string');
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
$this->assertInstanceOf('\InvalidArgumentException', $e, '->parse() throws an \InvalidArgumentException if the controller is not an aController::cAction string');
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
$parser->build('TestBundle\FooBundle\Controller\Default::indexAction');
|
||||||
|
$this->fail('->parse() throws an \InvalidArgumentException if the controller is not an aController::cAction string');
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
$this->assertInstanceOf('\InvalidArgumentException', $e, '->parse() throws an \InvalidArgumentException if the controller is not an aController::cAction string');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @dataProvider getMissingControllersTest
|
* @dataProvider getMissingControllersTest
|
||||||
*/
|
*/
|
||||||
@ -95,6 +120,11 @@ class ControllerNameParserTest extends TestCase
|
|||||||
return $bundles[$bundle];
|
return $bundles[$bundle];
|
||||||
}))
|
}))
|
||||||
;
|
;
|
||||||
|
$kernel
|
||||||
|
->expects($this->any())
|
||||||
|
->method('getBundles')
|
||||||
|
->will($this->returnValue($bundles))
|
||||||
|
;
|
||||||
|
|
||||||
return new ControllerNameParser($kernel);
|
return new ControllerNameParser($kernel);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user