Как исправить: Доктрина не возвращается должным образом - PullRequest
0 голосов
/ 26 мая 2019

Я хочу, чтобы динамическое удаление сообщений работало, но в результате возникает ошибка, поскольку значение равно нулю.

Контроллер

/**
  * @Route("/posts/delete/{id}", name="delete_post", methods={"DELETE"})
  */
  public function deletePost($id, LoggerInterface $logger)
  {

    $post=$this->getDoctrine()->getRepository(Article::class)->find($id);

    if(!$post)
    {
        $this->addFlash(
            'notice',
            'Something went wrong'
        );
        $logger->info($id);
    }
    else
    {

        $entityManager=$this->getDoctrine()->getManager();
        $entityManager->remove($post);
        $entityManager->flush();
        $entityManager->clear();
    }

    $response=new Response();
    return($response);
  }

JS

const articles = document.getElementById("articles");

if (articles) {
 articles.addEventListener("click", e => {
  if (e.target.className === "btn btn-danger delete-article") {
  if (confirm("Are you sure?")) {
    const id = e.target.getAttribute("data-id");

    fetch("/posts/delete/${id}", {
      method: "DELETE"
    }).then(res => window.location.reload());
  }
 }
 });
}

Twig

<table border="1" id="articles">
        <tr>
            <th class="pt">Post title</th>
            <th class="pe">Edit</th>
            <th class="pd">Delete</th>
        </tr>
        {% for article in articles %}
            <tr>
                <td class="title">{{ article.title }}</td>
                <td class="edit">
                    <a href="{{ path('posts_editor', {'id':article.id}) }}" class="btn btn-primary edit-article">
                        <img src="{{ asset('images/edit.png') }}" class="image">
                    </a>
                </td>
                <td class="delete">
                    <a href="#" class="btn btn-danger delete-article" data-id="{{article.id}}">
                        <img src="{{ asset('images/delete.png') }}" class="image">
                    </a>
                </td>
            </tr>
        {% endfor %}
    </table>

Я делал это с видеоуроком, и я не знаю, что не так с видео, этот код работал, но когда я написал его, я просто получил ошибку ниже

Error

EntityManager # remove () ожидает, что параметр 1 будет объектом сущности, задан NULL.

Надеюсь, кто-нибудь может мне помочь, я действительно расстроен из-за того, что он не работает.

Ответы [ 2 ]

0 голосов
/ 26 мая 2019

Fixed

Просто пришлось изменить это

fetch("/posts/delete/${id}", {
  method: "DELETE"
}).then(res => window.location.reload());

В этом

fetch("/posts/delete/" + id, {
      method: "POST"
    }).then(res => window.location.reload());

Теперь он удаляет должным образом

0 голосов
/ 26 мая 2019

Четко сказано, что $ post равно нулю, так что в этом случае вы можете выведите эти две переменные, и я надеюсь, что вы поймете, что происходит

dump($id);
dump($post);
exit

Вы можете увидеть документ Доктрина Удаление сущностей

Последнее обновление:

в вашем коде вы всегда отправляете ответ, вам нужно обновить ответ на конкретный с кодом успеха или ошибкой, по умолчанию отправляется код 200, а также вам необходимо обновить код

public function deletePost($id, LoggerInterface $logger)
{

$post=$this->getDoctrine()->getRepository(Article::class)->find($id);

    if(!$post)
    {
        $this->addFlash(
            'notice',
            'Something went wrong'
        );
        $logger->info($id);

        exit() your code here
        or throw an exception here
    }

    try {
        //remove entity here 
        $response = new Response(
            'Content',
            Response::HTTP_OK,
            ['content-type' => 'text/html']
        );

        return $response;
    } catch (\Exception $exception) {
        $response = new Response(
            $exception->getMessage(),
            Response::HTTP_INTERNAL_SERVER_ERROR,
            ['content-type' => 'text/html']
            );
        return $response;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...