簡體   English   中英

Symfony2獲取控制器基本路由名稱

[英]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()

但是據我所知,這里沒有什么有用的東西:

請求上下文

此外,如果您知道名稱,則可以獲得一條路線:

路線收集

但顯然,我不在這種情況下。

文檔中,我找到了它:

$this->container->get('request')->getPathInfo();

給我“買東西”或“賣東西”;

取決於我的切入點。

嘗試這個:

$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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM