web-dev-qa-db-ja.com

symfony-コントローラーのパラメーターでURLを生成

コントローラーで直接URLを生成したい。 routing.ymlファイルで定義され、パラメーターが必要なURLを使用したい。

クックブック(Routageセクション)でそのコードを見つけました:

$params = $router->match('/blog/my-blog-post');
// array('slug' => 'my-blog-post', '_controller' => 'AcmeBlogBundle:Blog:show')

$uri = $router->generate('blog_show', array('slug' => 'my-blog-post'));
// /blog/my-blog-post

しかし、$ routerを参照しているものがわかりません。明らかに、それは機能しません。コントローラーのパラメーターでルーティングURLを生成する簡単な方法はありますか?

50
user2094540

とても簡単です。

public function myAction()
{
    $url = $this->generateUrl('blog_show', array('slug' => 'my-blog-post'));
}

アクション内では、$ this-> generateUrlは、ルーターを使用して目的のルートを取得するエイリアスです。これも同じです。

$this->get('router')->generate('blog_show', array('slug' => 'my-blog-post'));
108
Sybio

絶対URLが必要な場合は、3番目のパラメーターがあります。

$product_url = $this->generateUrl('product_detail', 
    array(
        'slug' => 'slug'
    ),
    UrlGeneratorInterface::ABSOLUTE_URL
);

UrlGeneratorInterfaceを含めることを忘れないでください。

use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
18
Pedro Casado

コンテナからルーターを取得します。

$router = $this->get('router');

次に、ルーターを使用してURLを生成します

$uri = $router->generate('blog_show', array('slug' => 'my-blog-post'));
12
Jon Winstanley

コントローラーがSymfony\Bundle\FrameworkBundle\Controller\Controller;を拡張していることを確認してください

また、ターミナルでapp/console debug:routerをチェックして、symfonyがルートに名前を付けた名前を確認する必要があります

私の場合、アンダースコアの代わりにマイナスを使用しました

すなわちblog-show

$uri = $this->generateUrl('blog-show', ['slug' => 'my-blog-post']);
3
Edwin Ikechukwu