Witam, od kilku tygodni bawię się z Symfony2 i natrafiłem na pewien dziwny problem, którego nie mogę rozwiązać. Udało mi się, zgodnie z instrukcją na tej stronie, umożliwić wysyłanie plików na serwer i teraz chciałbym zaimplementować jakąkolwiek kontrolę nad tym, jakie pliki mogą zostać przesłane. Niestety, walidator jakby nie działa. Mam utworzone reguły, teoretycznie uniemożliwiające wysłanie plików innych niż pdf lub o rozmiarze większym niż 300kB, a mój plik .gif wciąż uparcie przechodzi dalej, tak jak w sumie każdy inny. Co tu jest nie tak?

Akcja odpowiadająca za upload plików:
  1. public function uploadAction() {
  2.  
  3. if (false === $this->get('security.context')->isGranted('ROLE_USER')) {
  4. throw new AccessDeniedException();
  5. }
  6. $request = $this->getRequest();
  7.  
  8. $pic = new Picture();
  9.  
  10. $form = $this->createForm(new UploadForm(), $pic);
  11.  
  12. if ($request->getMethod() == 'POST') {
  13. $form->bindRequest($request);
  14.  
  15. if ($form->isValid()) {
  16.  
  17. $em = $this->getDoctrine()->getEntityManager();
  18. $cat = $em->getRepository("PiachsoftDemotBundle:Category")->findOneByName('poczekalnia');
  19.  
  20. $pic->setUser($this->get('security.context')->getToken()->getUser());
  21. $pic->addCategory($cat);
  22.  
  23. $validator = $this->get('validator');
  24. $errors = $validator->validate($pic);
  25.  
  26. if (count($errors) > 0) {
  27. $errorstring = "";
  28. foreach ($errors as $error) {
  29. $errorstring .= $error;
  30. }
  31. $this->get('session')->setFlash('error', $errorstring);
  32. } else {
  33. //prePersist - generowanie nazwy, postPersist - upload
  34. $em->persist($pic);
  35. $em->flush();
  36. $this->get('session')->setFlash('notice', "Obrazek został wysłany");
  37. }
  38.  
  39. return $this->redirect($this->generateUrl('upload'));
  40. }
  41. }
  42.  
  43. return $this->render('PiachsoftDemotBundle:Default:upload.html.twig', array(
  44. 'form' => $form->createView(),
  45. ));
  46. }
W pliku Picture.php mam ustawione reguły:
  1. use Symfony\Component\Validator\Constraints as Assert;
  2.  
  3. /**
  4.   * @Assert\File(
  5.   * maxSize = "200k",
  6.   * mimeTypes = {"application/pdf", "application/x-pdf"},
  7.   * mimeTypesMessage = "Please upload a valid PDF"
  8.   */
  9. public $file;
W pliku app/config/config.yml rzecz jasna ustawiłem:
  1. framework:
  2. validation: { enable_annotations: true }
Z tego co rozumiem to powinno wystarczyć. Dlaczego w takim razie nie działa?