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:
public function uploadAction() {
if (false === $this->get('security.context')->isGranted('ROLE_USER')) {
throw new AccessDeniedException();
}
$request = $this->getRequest();
$pic = new Picture();
$form = $this->createForm(new UploadForm(), $pic);
if ($request->getMethod() == 'POST') {
$form->bindRequest($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getEntityManager();
$cat = $em->getRepository("PiachsoftDemotBundle:Category")->findOneByName('poczekalnia');
$pic->setUser($this->get('security.context')->getToken()->getUser());
$pic->addCategory($cat);
$validator = $this->get('validator');
$errors = $validator->validate($pic);
if (count($errors) > 0
) { $errorstring = "";
foreach ($errors as $error) {
$errorstring .= $error;
}
$this->get('session')->setFlash('error', $errorstring);
} else {
//prePersist - generowanie nazwy, postPersist - upload
$em->persist($pic);
$em->flush();
$this->get('session')->setFlash('notice', "Obrazek został wysłany");
}
return $this->redirect($this->generateUrl('upload'));
}
}
return $this->render('PiachsoftDemotBundle:Default:upload.html.twig', array( 'form' => $form->createView(),
));
}
W pliku Picture.php mam ustawione reguły:
use Symfony\Component\Validator\Constraints
as Assert;
/**
* @Assert\File(
* maxSize = "200k",
* mimeTypes = {"application/pdf", "application/x-pdf"},
* mimeTypesMessage = "Please upload a valid PDF"
*/
public $file;
W pliku app/config/config.yml rzecz jasna ustawiłem:
framework:
validation: { enable_annotations: true }
Z tego co rozumiem to powinno wystarczyć. Dlaczego w takim razie nie działa?