这是关于 symfony2 的非常简单的问题,但我无法通过搜索找到答案。
我知道我可以通过 twig 获取 url
{{ path('fos_user_profile_edit') }}
但是我怎样才能在 symfony2 php 源代码中做同样的事情呢?
提前致谢
这是关于 symfony2 的非常简单的问题,但我无法通过搜索找到答案。
我知道我可以通过 twig 获取 url
{{ path('fos_user_profile_edit') }}
但是我怎样才能在 symfony2 php 源代码中做同样的事情呢?
提前致谢
您可以使用router
服务。在控制器中它的准备使用generateUrl
功能
/**
* Generates a URL from the given parameters.
*
* @param string $route The name of the route
* @param mixed $parameters An array of parameters
* @param Boolean $absolute Whether to generate an absolute URL
*
* @return string The generated URL
*/
public function generateUrl($route, $parameters = array(), $absolute = false)
{
return $this->container->get('router')->generate($route, $parameters, $absolute);
}
文档中说明了您的操作方式。请参阅此文档条目。
如果要生成相对 URL,只需使用:
$url = $this->generateUrl('fos_user_profile_edit');
但是,如果您想生成一个绝对 URL,您可以使用它:
$router = $this->container->get('router');
$url = $router->generate('blog_show', array('slug' => 'my-blog-post'), true);
//--------------------true outputs an absolute URL-------------------------/\
// http://www.example.com/blog/my-blog-post
也取自这里的文档
generate()
- 正如这里已经提到的 - 需要 3 个参数。
/blog/{page}
where page 应该被替换为例如 1刚才提到generateUrl()
是因为它等于{{ path(...) }}
Twig 中的函数。
__FILE__
将为您提供当前文件的绝对路径。
这需要一些狩猎,但您实际上可以很容易地找到它。
path
函数添加到 Twig 的位置: /src/Symfony/Bridge/Twig/Extension/RoutingExtension.php#L39。$this->generator
构造函数传入的对象。我们现在知道我们可以调用$this->container->get('router')
来获取方法中generator
使用的getPath
,因此我们的代码最终看起来像:
$this->container->get('router')->generate($name, $parameters, $relative ? UrlGeneratorInterface::RELATIVE_PATH : UrlGeneratorInterface::ABSOLUTE_PATH);