문제

내 컨트롤러에 직접 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
.

그러나 저는 $ 라우터를 참조하는 것에 대해 이해하지 못합니다.분명히 작동하지 않습니다. 컨트롤러에서 매개 변수가있는 라우팅 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을 원하면 세 번째 매개 변수가 있습니다.

$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'));
.

make sure your controller extends Symfony\Bundle\FrameworkBundle\Controller\Controller;

you should also check app/console debug:router in terminal to see what name symfony has named the route

in my case it used a minus instead of an underscore

i.e blog-show

$uri = $this->generateUrl('blog-show', ['slug' => 'my-blog-post']);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top