2016-12-07 64 views
1

很多次,我看到,例如在Symfony的:將佈線通用方法連接到視圖中可以嗎?

HTML文件:

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

這是一個不好的氣味,如不使用depencency注:這樣的HTML被耦合到目前的框架。如果我想將它移動到另一個框架,我必須對其進行編輯。 只是從控制器傳遞生成的url字符串會更好嗎?

+5

這個問題沒有答案,這取決於你決定邏輯和視圖之間的界限。 –

+1

難聞的氣味嗎?告訴reactjs-developers;) – Timurib

+1

我同意。網址應該在控制器中生成,而不是在視圖中生成。該視圖僅用於輸出,不適用於任何邏輯。關注點分離。 –

回答

0

可以在控制器中生成url以將模型與視圖分開。但這只是第一步。最好的方法是分離模型,視圖和路由。我認爲最好的方法是使用生成路徑的視圖助手。我改變了一些項目框架(放棄symfony)。當項目使用模板(如Smarty或Twig)時更容易

查看Symfony Twig擴展以獲得一些將路徑生成和控制器分開的示例。

作爲示例,Twig指定路徑方法。 This view helper正在從路由參數中搜索url路徑。它與控制器或型號沒有任何關係。

path:返回給定 路由的相對URL(不含計劃和主機)。如果啓用了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', []); 
} 

而且在嫩枝相應的路徑:

<hr> 
<a href="{{ path('foo') }}" title="Alt">Some text</a> 
<br> 
1

你可以從你的後端,只要你想分開你的觀點,但你的前端文件必須參考的URL在某些時候,即使只是一個API。

將您的網址從<?php $this->generateUrl('blog_show', array('slug' => 'slug-value')); ?>更改爲<?php $showUrl; ?>只是使其不易維護,難以遷移到另一個框架。

如果你想成爲框架獨立性,你應該像API一樣使用Symfony後端。

相關問題