Nun, ich bin mit diesem mit Symfony 2.8 (und Symfony3):
<?php
namespace Company\Bundle\AppBundle\Component\HttpFoundation;
use Symfony\Component\HttpFoundation\Request as BaseRequest;
/**
* Request shortcuts.
*/
class Request extends BaseRequest
{
/**
* Extract the action name.
*
* @return string
*/
public function getActionName()
{
$action = $this->get('_controller');
$action = explode('::', $action);
// use this line if you want to remove the trailing "Action" string
//return isset($action[1]) ? preg_replace('/Action$/', '', $action[1]) : false;
return $action[1];
}
/**
* Extract the controller name (only for the master request).
*
* @return string
*/
public function getControllerName()
{
$controller = $this->get('_controller');
$controller = explode('::', $controller);
$controller = explode('\\', $controller[0]);
// use this line if you want to remove the trailing "Controller" string
//return isset($controller[4]) ? preg_replace('/Controller$/', '', $controller[4]) : false;
return isset($controller[4]) ? $controller[4] : false;
}
}
diese kundenspezifische Anfrage Klasse verwenden zu können, müssen Sie "verwenden" es in Ihrem web/app*.php
Controller:
use Company\Bundle\AppBundle\Component\HttpFoundation\Request;
// ...
$request = Request::createFromGlobals();
// ...
Dann in Ihrem Controller:
class AppController extends Controller
{
/**
* @Route("/", name="home_page")
* @Template("")
*
* @return array
*/
public function homePageAction(Request $request)
{
$controllerName = $request->getControllerName();
$actionName = $request->getActionName();
dump($controllerName, $actionName); die();
// ...
}
Will Ausgang:
AppController.php on line 27:
"AppController"
AppController.php on line 27:
"homePageAction"
Sie können diese Funktionen auch durch den RequestStack
Dienst zugreifen:
class MyService
{
/**
* @param RequestStack $requestStack
*/
public function __construct(RequestStack $requestStack)
{
$this->requestStack = $requestStack;
}
public function myService()
{
$this->controllerName = $this->requestStack->getMasterRequest()->getControllerName();
$this->actionName = $this->requestStack->getMasterRequest()->getActionName();
// ...
}
Ja, funktioniert gut! –
Das ist auch falsch. Die Aktionsmethode muss nicht aufgerufen werden * "somethingAction" * Dies kann durch Hinzufügen einer Überprüfung des Namens behoben werden, wenn "action" tailing ist. – Touki
@Touki, wie in meinem Kommentar zu meiner Antwort erwähnt, ist die Frage eine Symfony2 Frage (siehe Tag). Lesen Sie hier die Konventionen für die Benennung der Controller: http://symfony.com/doc/current/book/controller.html#a-simple-controller –