コントローラーで直接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を生成する簡単な方法はありますか?
とても簡単です。
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'));
絶対URLが必要な場合は、3番目のパラメーターがあります。
$product_url = $this->generateUrl('product_detail',
array(
'slug' => 'slug'
),
UrlGeneratorInterface::ABSOLUTE_URL
);
UrlGeneratorInterfaceを含めることを忘れないでください。
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
コンテナからルーターを取得します。
$router = $this->get('router');
次に、ルーターを使用してURLを生成します
$uri = $router->generate('blog_show', array('slug' => 'my-blog-post'));
コントローラーがSymfony\Bundle\FrameworkBundle\Controller\Controller;
を拡張していることを確認してください
また、ターミナルでapp/console debug:router
をチェックして、symfonyがルートに名前を付けた名前を確認する必要があります
私の場合、アンダースコアの代わりにマイナスを使用しました
すなわちblog-show
$uri = $this->generateUrl('blog-show', ['slug' => 'my-blog-post']);