gpt4 book ai didi

php - 为什么 Symfony 文件验证器不工作

转载 作者:可可西里 更新时间:2023-11-01 12:17:24 26 4
gpt4 key购买 nike

我想使用文件验证器来限制文件输入的 mime 类型。不幸的是,这个约束从未被使用过,所有文件都被接受了。

namespace WNC\SoldierBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;

/**
* WNC\SoldierBundle\Entity\Soldier
*
* @ORM\Table(name="soldier")
* @ORM\Entity(repositoryClass="WNC\SoldierBundle\Entity\SoldierRepository")
* @ORM\HasLifecycleCallbacks()
*/
class Soldier
{

/**
* @var string $picture
* @Assert\Image()
* @ORM\Column(name="picture", type="string", length=255)
*/
private $picture;

/**
* @var string $file
*
* @Assert\Image()
* @Assert\NotBlank()
*/
public $file;


public function getAbsolutePath()
{
return null === $this->picture ? null : $this->getUploadRootDir().'/'.$this->picture;
}

public function getWebPath()
{
return null === $this->picture ? null : $this->getUploadDir().'/'.$this->picture;
}

protected function getUploadRootDir()
{
// the absolute directory path where uploaded documents should be saved
return __DIR__.'/../../../../web/'.$this->getUploadDir();
}

protected function getUploadDir()
{
// get rid of the __DIR__ so it doesn't screw when displaying uploaded doc/image in the view.
return 'uploads/pictures';
}

/**
* @ORM\PrePersist()
* @ORM\PreUpdate()
*/
public function preUpload()
{

if($this->picture && file_exists($this->getAbsolutePath())) {
unlink($this->getAbsolutePath());
}

if (null !== $this->file) {
// do whatever you want to generate a unique name
$this->picture = uniqid().'.'.$this->file->guessExtension();
}

}

/**
* @ORM\PostPersist()
* @ORM\PostUpdate()
*/
public function upload()
{
if (null === $this->file) {
return;
}


// if there is an error when moving the file, an exception will
// be automatically thrown by move(). This will properly prevent
// the entity from being persisted to the database on error
$this->file->move($this->getUploadRootDir(), $this->picture);

}

/**
* @ORM\PostRemove()
*/
public function removeUpload()
{
if ($file = $this->getAbsolutePath()) {
unlink($file);
}
}
}

表单生成器:

public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('mothers_name')
->add('service_end_date', 'date',array(
'widget' => 'single_text',
'format' => 'MM/dd/yyyy',
'attr' => array('class' => 'date six columns')
))
->add('army_unit')
->add('city', 'city_selector')
->add('gender', 'choice', array(
'choices' => array(0 => 'Male', 1 => 'Female'),
'required' => false,
'expanded' => true,
'label' => 'Male / Female',
'data' => 0
))
->add('file','file', array(
'data_class' => 'Symfony\Component\HttpFoundation\File\File',
'label' => 'Picture'
))
->add('self_description', 'textarea')
->add('video', null, array(
'attr' => array(
'placeholder' => 'some link here'
)))
->add('wants_to_contact', null, array(
'label' => Soldier::getLabel('wants_to_contact')
))
->add('comments', 'textarea')
->add('user', new NameFormType('Application\Sonata\UserBundle\Entity\User'))
->add('city', 'city_selector')

;


}

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'validation_groups' => array('Registration'),
'cascade_validation' => true,
));


}

public function getName()
{
return 'wnc_soldierbundle_soldiertype';
}

Controller :

/**
* Creates a new Soldier entity.
*
* @Route("/create", name="soldier_create")
* @Method("POST")
* @Template("WNCSoldierBundle:Soldier:new.html.twig")
*/
public function createAction(Request $request)
{
$entity = new Soldier();
$form = $this->createForm(new SoldierType(), $entity);
$form->bind($request);

if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();

$em->persist($entity);
$em->flush();

return $this->redirect($this->generateUrl('soldier_show', array('id' => $entity->getId())));
}

return array(
'entity' => $entity,
'form' => $form->createView(),
);
}

最佳答案

查看之前的 SO 问题:Symfony2 validation using Assert annotation does not work .您可能想要确保您已满足所有推荐的配置以使用 Symfony2。

此外,没有必要使用 Image 约束来验证 $picture,因为它不是文件/图像。

/**
* @var string $picture
* @Assert\Image() <-- Should be removed
* @ORM\Column(name="picture", type="string", length=255)
*/
private $picture;

/**
* @var string $file <-- @var UploadedFile $file
*
* @Assert\Image()
* @Assert\NotBlank()
*/
public $file;

我实际上能够使用 YAML 替代方案验证上传的文件是否为图像,因此如果没有任何结果,您可能也想尝试一下。

关于php - 为什么 Symfony 文件验证器不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12160274/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com