Проблема: объект Symfony 3.4 не найден аннотацией @ParamConverter

У меня проблема с «объектом, не найденным аннотацией @ParamConverter» в Symfony 3.4, когда я пытаюсь удалить выбранные элементы таблицы. Я думаю, что это проблема, когда я пытаюсь получить "зрелище" с идентификатором ("findOneBy ()")

Это мой код (html.twig):

<form method="delete" action="{{ path('admin_spectacle_delete_selected') }}">
<button class="content-red btn btn-fabop" type="submit"><i class="fa fa-trash"></i> Tout supprimer</button>

<div class="table-responsive">
    <table id="myTable" class="table table-bordered table-hover table-striped">
        <thead>
            <tr>
                <th style="text-align:center;"><input type="checkbox" id="all"></th>
                <th>Nom</th>
                <th>Lieu</th>
                <th>Date spectacle</th>
                <th>Annee</th>
                <th>Actions</th>
            </tr>
        </thead>
        <tbody>
        {% for spectacle in spectacles %}
            <tr>
                <td id="spectacle{{ spectacle.id }}"><input type="checkbox" name='multiSelected[]' value="{{ spectacle.id }}"></td>
                <td>{{ spectacle.nom }}</td>
                <td>{{ spectacle.lieu }}</td>
                <td>{{ spectacle.dateSpectacle }}</td>
                <td>{{ spectacle.annee }}</td>
                <td>
                    <a class="content-blue btn-fabop btn" href="{{ path('admin_spectacle_show', { 'id': spectacle.id }) }}"><i class="fa fa-search"></i> Détail</a>
                    <a class="content-purple btn-fabop btn" href="{{ path('admin_spectacle_edit', { 'id': spectacle.id }) }}"><i class="fa fa-pencil"></i> Edition</a>
                    <a class="content-red btn-fabop btn" href="{{ path('admin_spectacle_delete_confirmed', { 'id': spectacle.id }) }}"><i class="fa fa-trash"></i> Suppression</a>


                </td>
            </tr>
        {% endfor %}
        </tbody>
    </table>
</div>

and controller :

  /**
* Confirmation delete
*
* @Route("/deleteSelected", name="admin_spectacle_delete_selected")
*/
public function deleteSelectedAction(Request $request)
{

    $items_selected_id = $request->get('multiSelected');

      $em = $this->getDoctrine()->getManager();
      $repository = $em->getRepository(Spectacle::class);
      foreach($items_selected_id as $item_id) {

        $spectacle = $repository->findOneById($item_id);

        if (!$spectacle) {
            throw $this->createNotFoundException(
                'No spectacle found for id '.$spectacle
            );
        }
        else{
            $em->remove($spectacle);
        }
      }
      $em->flush();  
      return $this->redirectToRoute('admin_spectacle_index');
}

Благодарю за ваш ответ !!


person user9541033    schedule 23.03.2018    source источник


Ответы (1)


Проблема исходит оттуда:

<form method="delete" action="admin_spectacle_delete_selected">

Вы буквально звоните .../admin_spectacle_delete_selected, я полагаю, у вас должен быть маршрут /spectacle/{id}

Итак, вы сопоставляете другой маршрут, пытаясь получить "спектакль" с идентификатором "admin_spectacle_delete_selected"

Ваша форма должна выглядеть так:

<form method="delete" action="{{ path('admin_spectacle_delete_selected') }}">

Что будет соответствовать вашему deleteSelectedAction

Также ваше действие должно выглядеть примерно так

  $items_selected_id = $request->get('multiSelected');

  $em = $this->getDoctrine()->getManager();
  $repository = $em->getRepository(Spectacle::class)
  foreach($items_selected_id as $item_id) {

    $spectacle = $repository->findOneById($item_id);

    if (!$spectacle) {
        throw $this->createNotFoundException(
            'No spectacle found for id '.$spectacle
        );
    }
    else{
        $em->remove($spectacle);
    }
  }
  $em->flush();  
  return $this->redirectToRoute('admin_spectacle_index');

Вы повторно объявляете свой EntityManager / Flushing каждый цикл, что для меня не имеет большого смысла :).

person Gregoire Ducharme    schedule 23.03.2018
comment
Благодарю за ваш ответ. Я пробую ваш код, но когда я нажимаю кнопку Tout supprimer, у меня возникает то же исключение: NotFoundHttpException HTTP 404 Not Found FabopBundle \ Entity \ Spectacle объект не найден аннотацией @ParamConverter. - person user9541033; 23.03.2018
comment
На самом деле, я пытаюсь удалить выбранные элементы в таблицах данных и выбрать несколько элементов, чтобы выбрать элементы или нет - person user9541033; 23.03.2018
comment
Итак, я не могу использовать идентификатор в пути к контроллеру, потому что хочу удалить только выбранные элементы. Я не знаю, ясно ли я - person user9541033; 23.03.2018
comment
Oopsssssssss Я не видел своего плохого - person user9541033; 23.03.2018
comment
Я не понимаю, в чем проблема. Как вы думаете, это связано с Param Converter? - person user9541033; 23.03.2018
comment
Можете ли вы обновить свое сообщение с помощью измененного кода? Действие атрибута в вашей форме наверняка неверно :) - person Gregoire Ducharme; 23.03.2018
comment
Я обновил его, вы можете увидеть мой код. В любом случае спасибо за ответы :) - person user9541033; 23.03.2018
comment
Да, я только что видел ... Теперь все в порядке - person user9541033; 23.03.2018
comment
На самом деле, я думаю, что с самого начала не добираюсь до deleteSelectedAction. Да та же ошибка ... - person user9541033; 23.03.2018
comment
Это все еще то же исключение, и я очистил кеш, и я не вижу URL-адрес в html .... - person user9541033; 23.03.2018
comment
Я покинул свой компьютер, но все еще вошел в систему. Я не могу сейчас протестировать, но сделаю как можно скорее - person user9541033; 23.03.2018
comment
Здравствуйте, я не знаю, здесь ли вы, но исключение всегда одно и то же .... Нет никакого представления с маршрутом контроллера, возможно, это из-за этого .... - person user9541033; 26.03.2018
comment
На самом деле, я не вижу URL-адрес, поэтому мне нужно добавить связанное представление? Я вижу проблему с URL-адресом, но забыл вам сказать ... - person user9541033; 26.03.2018
comment
Проблема решена. Я просто заменяю метод удаления для публикации в моем действии формы, и это работает! Спасибо за ответ ! - person user9541033; 26.03.2018