0

メソッドの 1 つからコントローラー クラスの基本ルートを取得しようとしています。:

    /**
     * @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()

しかし、私が見る限り、そこには何も役に立ちません:

リクエストのコンテキスト

また、名前がわかっている場合はルートを取得できます。

ルート コレクション

しかし、明らかに、私はこの場合ではありません。

4

5 に答える 5

3

これを試して:

$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
于 2013-11-18T07:47:04.447 に答える
3

私が見つけたドキュメントから:

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

'buy-stuff' または 'sell-stuff' を教えてくれます。

私のエントリーポイントに応じて。

于 2013-05-28T10:06:41.537 に答える
2

「ベースルート」なんてものはありません。これらのルートの名前定義は効果がありません。

 /**
  * @Route("/buy-stuff", name="buy-stuff")
  * @Route("/sell-stuff" , name="for-sale")
  */
 Class XY 
 {
     // ...
 }

コントローラーに名前のないルート プレフィックスが構成されています。

コンテナー対応サービス/コントローラーで現在のルート名を取得するには:

$route = $this->container->get('request')->get('_route');

2 番目のオプションは、コントローラーに $_route を魔法のように挿入することです。

class MyController extends Controller
{
    public function myAction($_route)
    {
        // ...

Twig では、次のようなルートを取得します (転送されたリクエストではなく、マスター リクエストに対してのみ機能します - ESI で慎重に使用してください)。

{{ app.request.attributes.get('_route') }}

あなたがしようとしていることは、ルート名にパラメーターを含め、それぞれが別のコンテナーパラメーターからの別のプレフィックスを持つ 2 つのルーティング構成を持つことで実現できます。

# app/config/config.yml
parameters:
    acme.routep_refix.buy_stuff: /buy-stuff
    acme.route_prefix.for_sale:  /for-sale

次に、2 つのルーティング構成を作成します。

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"
于 2013-05-24T10:45:07.367 に答える
1

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

于 2016-04-24T19:55:31.193 に答える
0

$_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,
        );
     }


 }
于 2014-06-12T09:58:51.740 に答える