{# src/Acme/ArticleBundle/Resources/views/Article/recentList.html.twig #} {% for article in articles %} <a href="/article/{{ article.slug }}"> {{ article.title }} </a> {% endfor %}
PHP代码格式:
<!-- src/Acme/ArticleBundle/Resources/views/Article/recentList.html.php --> <?php foreach ($articles as $article): ?> <a href="/article/<?php echo $article->getSlug() ?>"> <?php echo $article->getTitle() ?> </a> <?php endforeach; ?>
为了能包含controller,你需要使用一个标准的字符语法来表示controller,格式类似bundle:controller:action
Twig格式:
{# app/Resources/views/base.html.twig #} ... <div> {% render "AcmeArticleBundle:Article:recentArticles" with {'max': 3} %} </div>
PHP代码格式:
<!-- app/Resources/views/base.html.php --> ... <div> <?php echo $view['actions']->render('AcmeArticleBundle:Article:recentArticles', array('max' => 3)) ?> </div>
无论什么时候,你需要一个变量或者一些列信息时,你不必在模板中访问,而是考虑渲染一个controller。因为Controller能够更快的执行并且很好的提高了代码的组织和重用。
链接到页面:
在你的应用程序中创建一个链接到其它页面对于一个模板来说是再普通不过的事情了。我们采用path Twig函数基于路由配置来生成URL而非在模板中硬编码URL。以后如果你想修改一个特定页面的URL,你只需要改变路由配置即可,模板将自动生成新的URL。比如我们打算链接到"_welcome"页面,首先定义其路由配置:
YAML格式:
_welcome: pattern: / defaults: { _controller: AcmeDemoBundle:Welcome:index }
XML格式:
<route pattern="https://www.jb51.net/"> <default key="_controller">AcmeDemoBundle:Welcome:index</default> </route>
PHP代码格式:
$collection = new RouteCollection(); $collection->add('_welcome', new Route('https://www.jb51.net/', array( '_controller' => 'AcmeDemoBundle:Welcome:index', ))); return $collection;
我们可以在模板中使用Twig函数 path来引用这个路由链接该页面。
Twig格式:
<a href="{{ path('_welcome') }}">Home</a>
PHP代码格式:
<a href="<?php echo $view['router']->generate('_welcome') ?>">Home</a>
上面的内容会生成一个URL /
我们看另一个复杂一些的路由定义:
YAML格式:
article_show: pattern: /article/{slug} defaults: { _controller: AcmeArticleBundle:Article:show }
XML格式:
<route pattern="/article/{slug}"> <default key="_controller">AcmeArticleBundle:Article:show</default> </route>
PHP代码格式:
$collection = new RouteCollection(); $collection->add('article_show', new Route('/article/{slug}', array( '_controller' => 'AcmeArticleBundle:Article:show', ))); return $collection;
这种情况下你需要指定路由名称(article_show)还要一个参数值{slug}。现在让我们再来看上面的recentList模板 ,我们修改以前的硬编码而使用path来链接正确的文章。
Twig格式:
{# src/Acme/ArticleBundle/Resources/views/Article/recentList.html.twig #} {% for article in articles %} <a href="{{ path('article_show', { 'slug': article.slug }) }}"> {{ article.title }} </a> {% endfor %}
PHP代码格式:
<!-- src/Acme/ArticleBundle/Resources/views/Article/recentList.html.php --> <?php foreach ($articles in $article): ?> <a href="<?php echo $view['router']->generate('article_show', array('slug' => $article->getSlug()) ?>"> <?php echo $article->getTitle() ?> </a> <?php endforeach; ?>
你也可以通过url Twig函数来生成一个绝对路径的URL:
<a href="{{ url('_welcome') }}">Home</a>
在PHP代码模板中,你需要给generate()方法传入第三个参数true 来实现生成绝对路径URL
<a href="<?php echo $view['router']->generate('_welcome', array(), true) ?>">Home</a>
链接到资源
模板通常也需要一些图片,Javascript,样式文件和其它资产。当然你可以硬编码它们的路径。比如/images/logo.png。 但是Symfony2 提供了一个更加动态的Twig函数 asset()。
Twig格式:
<img src="{{ asset('images/logo.png') }}" alt="Symfony!" /> <link href="{{ asset('css/blog.css') }}" type="text/css" />
PHP代码格式: