将routing-generale方法连接到视图中是否可以?

时间:2016-12-07 17:31:55

标签: symfony

我多次看到,例如在Symfony中:

html文件:

<hr>
<?php $this->generateUrl('blog_show', array('slug' => 'slug-value')); ?>
<br>

这是一种难闻的气味,就像没有使用依赖注入一样:这种方式将HTML与当前框架耦合。如果我想将它移动到另一个框架,我必须编辑它。 从控制器传递生成的url字符串不是更好吗?

2 个答案:

答案 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>