[英]Symfony2 get controller base route name
我正在尝试从一种方法中获取Controller类的基本路由。 :
/**
* @Route("/buy-stuff", name="buy-stuff")
* @Route("/sell-stuff" , name="for-sale")
*/
class SalesController extends Controller
{
/**
* @Route("/", name="salesindex")
* @Template()
*/
public function indexAction()
{
//Get the entry route here. eg: 'buy-stuff' or 'sell-stuff'
}
}
我试过了:
$this->container->get('router')->getContext()
但是据我所知,这里没有什么有用的东西:
此外,如果您知道名称,则可以获得一条路线:
但显然,我不在这种情况下。
尝试这个:
$name = 'buy-stuff'; // controller action name
/** @var RouterInterface $router */
$router = $this->container->get('router');
$route = $router->getRouteCollection()->get($name);
$controllerAction = $route->getDefault('_controller');
// also you can get a lot of information from the $route variable
没有所谓的“基本路线”。 这些路由上的名称定义将无效。
/**
* @Route("/buy-stuff", name="buy-stuff")
* @Route("/sell-stuff" , name="for-sale")
*/
Class XY
{
// ...
}
您在控制器中配置了没有名称的路由前缀 。
使用以下命令在容器感知的服务/控制器中获取当前路由名称:
$route = $this->container->get('request')->get('_route');
第二种选择是在控制器中神奇地插入$ _route。
class MyController extends Controller
{
public function myAction($_route)
{
// ...
在Twig中,按照以下方式获取您的路线(仅适用于主请求,不适用于转发的请求-与ESI一起使用心得灵)
{{ app.request.attributes.get('_route') }}
您可以通过在路由名称中包含一个参数并具有两个路由配置来完成您的操作,每个路由配置的前缀都与容器参数分开。
# app/config/config.yml
parameters:
acme.routep_refix.buy_stuff: /buy-stuff
acme.route_prefix.for_sale: /for-sale
现在创建两个路由配置:
acme.buy_stuff:
prefix: %acme.route_prefix.buy_stuff%
resource: "@AcmeHelloBundle/Resources/config/routing_buy_stuff.yml"
acme.buy_stuff:
prefix: %acme.route_prefix.for_salef%
resource: "@AcmeHelloBundle/Resources/config/routing_for_sale.yml"
您还可以使用特殊的$_route
变量,该变量设置为匹配的路由的名称。
class BaseController extends Controller
{
// ...
/**
* @param $_route
*/
public function testAction($_route)
{
dump($_route);
// Or by request_stack:
dump($this->get('request_stack')->getCurrentRequest()->attributes->get('_route'));
// ...
}
// [...]
}
更多信息: https : //symfony.com/doc/current/book/routing.html#route-parameters-and-controller-arguments
您必须在操作控制器中使用$_route
。
/**
* @Route("/stuff", name="stuff")
*/
class SalesController extends Controller
{
/**
* @Route("/buy", name="stuff_buy")
* @Route("/sell" , name="stuff_sale")
* @Template()
*/
public function indexAction($_route)
{
if ($_route === 'stuff_buy') {
$something = '...';
}
if ($_route === 'stuff_sale') {
$something = '...';
}
return array(
'something' => $something,
);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.