2016-01-05 3 views
4

adutomatic операция падла генерируется Symfony, а также Symfony демонстрационное приложение имеет следующую структуру кода для удаления действияSymfony2 - использование Delete формы в операции CRUD

/** 
    * Deletes a testing entity. 
    * 
    * @Route("/{id}", name="testing_delete") 
    * @Method("DELETE") 
    */ 
    public function deleteAction(Request $request, testing $testing) 
    { 
     $form = $this->createDeleteForm($testing); 
     $form->handleRequest($request); 

     if ($form->isSubmitted() && $form->isValid()) { 
      $em = $this->getDoctrine()->getManager(); 
      $em->remove($testing); 
      $em->flush(); 
     } 

     return $this->redirectToRoute('testing_index'); 
    } 

    /** 
    * Creates a form to delete a testing entity. 
    * 
    * @param testing $testing The testing entity 
    * 
    * @return \Symfony\Component\Form\Form The form 
    */ 
    private function createDeleteForm(testing $testing) 
    { 
     return $this->createFormBuilder() 
      ->setAction($this->generateUrl('testing_delete', array('id' => $testing->getId()))) 
      ->setMethod('DELETE') 
      ->getForm() 
     ; 
    } 

мой вопрос, почему же нам нужна форма удалить? возможно, у нас есть ссылка в ветке с параметром id соответственно, возможно, мы просто сделаем следующее: почему нам нужно проверить, не был ли объект isValid() внутри формы до его удаления?

/** 
    * test delete 
    * @Route("/{id}", name="testing_delete") 
    * @Method("DELETE") 
    */ 
    public function deleteAction(testing $testing) { 
     $em = $this->getDoctrine()->getManager(); 
     $em->remove($testing); 
     $em->flush(); 
     return $this->redirectToRoute('testing_showall'); 
    } 

ответ

7

Если вы использовали ссылку для удаления с идентификатором, возможно, робот может удалить ваши данные с помощью цикла.

В проверке действий Symfony «DELETE» метод, а также, если ваш CRSF лексема проверить с помощью метода IsValid «$ форма-> IsValid()»

Вот причина безопасности это создать форму и подтвердить

+0

ах да, отлично, есть ли какие-либо документы в Интернете, которые говорят об этом? –

+0

Я не знаю о документах, я дал ответ в соответствии с моими знаниями. Если я найду документ с вами. Спасибо –

+0

эта ссылка рассказывает о защите csrf, от документа Symfony http://symfony.com/doc/current/components/form.html#csrf-protection – MedUnes

4

Не используя простая ссылка для удаления данных означает концепции safe methods в HTTP (если вы имели только простую связь, вы должны послать GET запрос к URL):

Некоторые из методов (например, HEAD, GET, OPTIONS и TRACE), по соглашению , определенные как безопасные, что означает, что они предназначены только для поиска информации и не должны изменять состояние сервера. Другими словами, они не должны иметь побочных эффектов [...]