【问题标题】:Symfony 2.5 & twig: how to clean up this code?Symfony 2.5 & twig:如何清理这段代码?
【发布时间】:2014-12-28 03:47:11
【问题描述】:

我是 Symfony 的新手,希望尽早使用最佳实践。我下面的代码有效,但感觉有点脏。

我担心,如果我在这里写太多代码。也许我想念一些我还不知道的 Symfony 背景魔法。详情如下。

你会改变什么(为什么)?我感谢每一个关于成为更好的开发人员的建议。提前致谢!

routing.yml

items_edit:
  path:     /items/edit/{id}
  defaults: { _controller: myBundle:items:edit, id: null } # null = if not set?
  requirements:
    id: \d+

ItemController.php

我是否必须通过 $item 或者数据是否可以通过 twig 获取?

public function editAction($id, Request $request) {
    $em   = $this->getDoctrine()->getManager();
    $repo = $em->getRepository('ItemsRepo');
    $item = $repo->find($id);
    $form = $this->createForm(new ItemFormType(), $item);

    if ($request->isMethod('POST')) {
        $form->handleRequest($request);
        if ($form->isValid()) {
            $em->persist($item);
            $em->flush();

            $this->get('session')->getFlashBag()->add('info', 'saved.');
            return $this->redirect($this->generateUrl('items_list'));
        }
    }

    return $this->render('edit.html.twig', array(
        'form' => $form->createView(),
        'item' => $item // !!!
    ));
}

edit.html.twig

我必须在此处添加{id: item.id} 吗?

{% block content %}
    <form action="{{ path('items_edit', {id: item.id}) }}" method="POST" {{ form_enctype(form) }}>
        {# ... custom stuff ... #}     
    {{ form_end(form) }}
{% endblock %}

【问题讨论】:

标签: php symfony doctrine twig yaml


【解决方案1】:

id: null\d+ 要求在你的路由是没用的,因为你实际上是在编辑现有的实体,你最好删除它; $em-&gt;persist($item); 也是不必要的,因为你已经在创建的时候持久化并刷新了它,这次你不需要再次持久化,只需刷新它。如果您想向用户显示一些信息,例如“编辑标题为 SOME_TITLE 的项目”,或者如果您想显示一些图像字段的缩略图,那么将$item 传递给表单呢?传递它并检索字段值,它是你的.. 附加说明,/items/edit/{id} 不是很漂亮,通常它像/items/{id}/edit/items/{id}/delete...

【讨论】:

    【解决方案2】:

    你可以替换

    <form action="{{ path('items_edit', {id: item.id}) }}" method="POST" {{ form_enctype(form) }}>
    

    {{ form_start(form) }}
    

    这样您就不需要将item 传递给模板。

    http://symfony.com/doc/current/book/forms.html#rendering-a-form-in-a-template

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多