Symfony 2.5 & amp; веточка: как почистить этот код?

Я новичок в 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 или данные как-то еще можно получить через веточку?

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 %}

1

Решение

id: null с \d+ требования в вашем маршруте бесполезны, потому что вы фактически редактируете существующую сущность, вам лучше удалить ее; $em->persist($item); Это также не нужно, поскольку вы уже сохранили и сбросили его при создании, на этот раз вам не нужно снова сохранять, просто очистите его. Какое количество пропусков $item чтобы сформировать, если вы хотите показать некоторую информацию пользователю, например, «Редактирование элемента с заголовком SOME_TITLE», или если есть какое-то поле изображения, которое вы хотите показать миниатюрой .., вы можете передать его и получить значение поля, это вам .. дополнительная заметка, /items/edit/{id} не очень красиво, обычно это делается как /items/{id}/edit, /items/{id}/delete

1

Другие решения

Вы могли бы заменить

<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

1

По вопросам рекламы [email protected]