'Symfony How to get class annotation routing parameter from action

Have a problem here:

/**
 * Deal controller.
 *
 * @Route("/portfolio/{portfolio_id}/deal")
 */
class DealController extends Controller
{
    // … some code here…

    /**
     * Creates a new Deal entity.
     *
     * @Route("/", name="mb_deal_create")
     * @Method("POST")
     * @Template("MBPortfolioBundle:Deal:new.html.twig")
     */
    public function createAction(Request $request)
    {
    }

So this is my question: how to get $portfolio_id route parameter defined in class annotation from within this createAction?

If I'm trying just add this parameter to the parameter list - it's null then:

public function createAction(Request $request, $portfolio_id) // no way

If I'm trying to get it from query parameter bag - it's null then:

public function createAction(Request $request)
{
    $portfolio_id = $request->query->get('portfolio_id'); // no way

So what I need to do?



Solution 1:[1]

Edit

Move portfolio_id to actions' annotation

/**
 * Deal controller.
 *
 */
class DealController extends Controller
{

// … some code here…

/**
 * Creates a new Deal entity.
 *
 * @Route("/portfolio/{portfolio}/deal", name="mb_deal_create")
 * @Method("POST")
 * @Template("MBPortfolioBundle:Deal:new.html.twig")
 */
public function createAction(Request $request, Portfolio $portfolio)
{
}

Solution 2:[2]

Mine solution is right here:

$portfolio_id = $request->attributes->get('_route_params')['portfolio_id'];

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 Serge Velikan