Symfony 4 Форма отправки в маршрут - PullRequest
0 голосов
/ 15 марта 2019

У меня проблема с формой, которая удаляет объект доктрины при публикации в Symfony 4. Я искал проблему и обнаружил, что мне может потребоваться определить службу?Я новичок в Symfony, так что не вините меня, пожалуйста ... Я использую таблицы данных, и форма в модальном.Когда я нажимаю кнопку удаления в модальном режиме, он пытается отправить сообщение на маршрут, но появляется сообщение об ошибке:

Служба «запрос» не найдена: вы имели в виду «request_stack»?В любом случае, контейнер внутри «App \ Controller \ ItemManagement» - это меньший локатор службы, который знает только о «doctrine», «form.factory», «http_kernel», «parameter_bag», «request_stack», «router», «security»Услуги .csrf.token_manager "," session "и" twig ".Попробуйте вместо этого использовать внедрение зависимостей.

<div class="modal fade" id="deleteModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
  <div class="modal-dialog modal-dialog-centered" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="deleteit">Delete Item</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body">

        Are you sure you want to delete this item?

        <form action="{{ path('delete_item')}}" method="POST" id="theform" >

          <input type="hidden" value="" name="itemtodel" id="itemtodel"/>
        </form>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
        <button type="submit" form="theform"  class="btn btn-danger">Delete</button>
      </div>
    </div>
  </div>
</div>

В Контроллер :

/**
     * @Route("/delitem", name="delete_item", methods={"POST"});
     */
    public function deletetheitem(Request $request)
    {
      if ($request->isMethod('POST')) {

        $itemid = $this->get('request')->request->get('itemtodel');

          ... deleting item code...
        }

      }


      return $this->redirectToRoute("item_management", [], 301);


    }

Маршрут item_management находится в том же контроллере и работает нормально.Я делаю это неправильно?Пожалуйста, если у вас есть что предложить, я буду признателен, спасибо !!!!

Ответы [ 2 ]

0 голосов
/ 15 марта 2019

Прежде всего, вам не нужно определять какие-либо службы, поскольку все должно работать из коробки в Symfony 4 (если вы не настраивали конфигурацию по умолчанию).

Во-вторых, не создавайте статические HTML-формы в шаблоне. Вместо этого используйте формы Symfony (https://symfony.com/doc/current/forms.html).

В-третьих, вам не нужно использовать объект запроса, если не должно быть дополнительных проверок для запроса, которые получают объект для удаления. Если вы не отключили опцию преобразования параметров (см. https://symfony.com/doc/current/best_practices/controllers.html#using-the-paramconverter) по умолчанию в Symfony 4, действие удаления может быть таким:

/**
 * @Route("/delitem/{item}", name="delete_item", methods={"POST"});
 */
public function deleteItemAction(Item $item)
{
    $doctrine = $this->getDoctrine();
    $em       = $doctrine->getManager();
    $em->remove($item);
    $em->flush();

    //process your response
}
0 голосов
/ 15 марта 2019

попробуйте заменить

$this->get('request')->request->get('itemtodel')

на

$request->request->get('itemtodel')
...