2

这是关于 symfony2 的非常简单的问题,但我无法通过搜索找到答案。

我知道我可以通过 twig 获取 url

{{ path('fos_user_profile_edit') }}

但是我怎样才能在 symfony2 php 源代码中做同样的事情呢?

提前致谢

4

4 回答 4

2

您可以使用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);
}
于 2013-06-15T17:00:55.333 回答
1

文档中说明了您的操作方式。请参阅文档条目。

如果要生成相对 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
  • boolean true/false 生成的 URL 是否应该是绝对的

刚才提到generateUrl()是因为它等于{{ path(...) }}Twig 中的函数。

于 2013-06-15T17:23:21.003 回答
0
__FILE__

将为您提供当前文件的绝对路径。

于 2013-06-15T16:53:53.887 回答
0

这需要一些狩猎,但您实际上可以很容易地找到它。

  1. 找到path函数添加到 Twig 的位置: /src/Symfony/Bridge/Twig/Extension/RoutingExtension.php#L39
  2. 检查getPath函数。观察它使用$this->generator构造函数传入的对象。
  3. 查找此扩展的加载位置:/src/Symfony/Bundle/TwigBundle/Resources/config/twig.xml#L81

我们现在知道我们可以调用$this->container->get('router')来获取方法中generator使用的getPath,因此我们的代码最终看起来像:

$this->container->get('router')->generate($name, $parameters, $relative ? UrlGeneratorInterface::RELATIVE_PATH : UrlGeneratorInterface::ABSOLUTE_PATH);
于 2013-06-15T17:13:05.663 回答