html文件:
<hr>
<?php $this->generateUrl('blog_show', array('slug' => 'slug-value')); ?>
<br>
这是一种难闻的气味,就像没有使用依赖注入一样:这种方式将HTML与当前框架耦合。如果我想将它移动到另一个框架,我必须编辑它。 从控制器传递生成的url字符串不是更好吗?
答案 0 :(得分:1)
您可以根据需要将视图与后端分开,但是您的前端文件必须在某个时刻引用URL,即使它只是一个api。
将您的网址从<?php $this->generateUrl('blog_show', array('slug' => 'slug-value')); ?>
更改为<?php $showUrl; ?>
只会降低其可维护性,并且难以迁移到其他框架。
如果你想成为Framework Independant,你应该像API那样使用Symfony后端。
答案 1 :(得分:0)
可以在控制器中生成URL以将模型与视图分开。但这只是第一步。最好的方法是分离模型,视图和路由。我认为最好的方法是使用生成路径的视图助手。我改变了一些项目框架(abandonware to symfony)。当项目使用模板(如Smarty或Twig)时,它会更容易。
看看Symfony Twig扩展,有一些分隔路径生成和控制器的例子。
例如,Twig的目的是路径方法。 This view helper正在从路径参数中搜索url路径。它与控制器或模型没有任何关系。
path:返回给定的相对URL(没有scheme和host) 路线。如果启用了relative,它将创建相对于的相对路径 当前路径。
正如你在那里看到的,你只需要小心路线名称。
/**YourController**/
/**
* @Route("/foo", name="new-game", methods="get")
*
* @return Response
*/
public function myFooAction()
{
//Your code
//The rendering without information about his own or other path
return $this->render('default/foo.html.twig', []);
}
和Twig中的相应路径:
<hr>
<a href="{{ path('foo') }}" title="Alt">Some text</a>
<br>