很多次,我看到,例如在Symfony的:將佈線通用方法連接到視圖中可以嗎?
HTML文件:
<hr>
<?php $this->generateUrl('blog_show', array('slug' => 'slug-value')); ?>
<br>
這是一個不好的氣味,如不使用depencency注:這樣的HTML被耦合到目前的框架。如果我想將它移動到另一個框架,我必須對其進行編輯。 只是從控制器傳遞生成的url字符串會更好嗎?
很多次,我看到,例如在Symfony的:將佈線通用方法連接到視圖中可以嗎?
HTML文件:
<hr>
<?php $this->generateUrl('blog_show', array('slug' => 'slug-value')); ?>
<br>
這是一個不好的氣味,如不使用depencency注:這樣的HTML被耦合到目前的框架。如果我想將它移動到另一個框架,我必須對其進行編輯。 只是從控制器傳遞生成的url字符串會更好嗎?
可以在控制器中生成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>
你可以從你的後端,只要你想分開你的觀點,但你的前端文件必須參考的URL在某些時候,即使只是一個API。
將您的網址從<?php $this->generateUrl('blog_show', array('slug' => 'slug-value')); ?>
更改爲<?php $showUrl; ?>
只是使其不易維護,難以遷移到另一個框架。
如果你想成爲框架獨立性,你應該像API一樣使用Symfony後端。
這個問題沒有答案,這取決於你決定邏輯和視圖之間的界限。 –
難聞的氣味嗎?告訴reactjs-developers;) – Timurib
我同意。網址應該在控制器中生成,而不是在視圖中生成。該視圖僅用於輸出,不適用於任何邏輯。關注點分離。 –