56

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

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

$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 を生成する簡単な方法はありますか?

4

4 に答える 4

120

それはとても簡単です:

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'));
于 2013-11-18T14:47:55.223 に答える
19

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

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

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

use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
于 2016-10-06T14:00:08.093 に答える
13

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

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

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

$uri = $router->generate('blog_show', array('slug' => 'my-blog-post'));
于 2013-11-18T14:47:48.797 に答える