簡體   English   中英

我應該在將獲取的實體對象傳遞到樹枝模板之前重新打包嗎?

[英]Should I repack the fetched entity object before passing it to the twig template?

我正在使用Symfony4。我有一個已獲取的對象$ user與其他實體有關系。 我已經設置了所有的吸氣劑,所以我可以從該$ user對象中獲取其他信息。

$user = $em->getDoctrine()->getRepository(User::class)->find($id);

$usergroup = $user->getGroup()->getName();

我要做的是創建一個新對象,用於將$ user對象中需要的信息重新打包后再傳遞給模板。

# controller
$repack_user = new \stdClass();
$repack_user->id = $user->getId();

$user_friends = $user->getFrends();

$friends_gf = [];

foreach($user_friends as $friend) {
    $friends_gf[] = $friend->getGirlfriend()->getName();
}

$repack_user->friends_gf = $friends_gf;

return $this->render("home.html.twig", ['user' => $repack_user]);

然后在模板中,用類似的程序將其解壓縮。

# twig template
{{ user.id }}

{% for gf in user.friends_gf %}
    {{ gf }}
{% endfor %}

但是由於我也可以在樹枝中調用實體函數,因此可以跳過控制器中的所有重新打包過程,並將$ user對象直接傳遞到模板中。

# skipped repack in controller
# twig template
{{ user.getID() }}

{% for friend in user.getfriends %}
    {{ friend.getGirlfriend().getName() }}
{% endfor %}

第一種方法是多余的,因為我必須做兩次。 第二種方法很難讀。 那么哪種方法更合理? 這是什么慣例?

通常的做法是絕對將實體圖直接移交給視圖。

您為什么認為第二個示例更難閱讀?

如果您不希望模板中的那些鏈式調用,則可以考慮在您的User實體中添加另一個getter。 就像是:

public function getNamesOfFriendsGirlfriends() 
{
  $gfNames = [];
  foreach($this->getFriends() as $friend) {
    $gfNames[] = $friend->getGirlfriend()->getName();
  }
  return $gfNames;
}

然后在您的模板中調用它:

{% for gfName in user.namesOfFriendsGirlfriends %}
    {{ gfName }}
{% endfor %}

而且,如果您需要許多此類幫助器,並且不想破壞漂亮干凈的實體,則可以在將其用於視圖層之前考慮將其包裝在Decorator對象中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM