我想让用户从他们的驱动器上传图片。在网上搜索,这是我发现的:
表格:
class ImageForm extends BaseForm
{
public function configure()
{
parent::setUp();
$this->setWidget('file', new sfWidgetFormInputFileEditable(
array(
'edit_mode'=>false,
'with_delete' => false,
'file_src' => '',
)
));
$this->setValidator('file', new sfValidatorFile(
array(
'max_size' => 500000,
'mime_types' => 'web_images',
'path' => '/web/uploads/assets',
'required' => true
//'validated_file_class' => 'sfValidatedFileCustom'
)
));
}
}
行动:
public function executeAdd(sfWebRequest $request)
{
$this->form = new ImageForm();
if ($request->isMethod('post'))
if ($this->form->isValid())
{
//...what goes here ?
}
}
模板:
<form action="<?php echo url_for('@images_add') ?>" method="POST" enctype="multipart/data">
<?php echo $form['file']->renderError() ?>
<?php echo $form->render(array('file' => array('class' => 'file'))) ?>
<input type="submit" value="envoyer" />
</form>
Symfony不会抛出任何错误,但不会传输任何内容。我错过了什么?
答案 0 :(得分:2)
你缺少一个重要的部分,它将值绑定到表单:
public function executeAdd(sfWebRequest $request)
{
$this->form = new ImageForm();
if ($request->isMethod('post'))
{
// you need to bind the values and files to the submitted form
$this->form->bind(
$request->getParameter($this->form->getName())
$request->getFiles($this->form->getName())
);
// then check if its valid - if it is valid the validator
// should save the file for you
if ($this->form->isValid())
{
// redirect, render a different view, or set a flash message
}
}
}
但是,您要确保为表单设置名称格式,以便以时尚方式获取值和文件...在configure方法中,您需要调用setNameFormat
:
public function configure()
{
// other config code
$this->widgetSchema->setNameFormat('image[%s]');
}
同样在configure
你不需要调用parent::setUp()
...这是自动调用的,实际上是调用configure
方法。
LAstly,你需要更正标记 - 你从你的标签中发出表格名称:
<form action="<?php echo url_for('@images_add') ?>" name="<?php echo $form->getName() ?>" method="POST" enctype="multipart/data">
就我个人而言,我喜欢使用表单对象来生成它,并且它看起来更清晰:
<?php echo $form->renderFormTag(
url_for('@images_add'),
array('method' => 'post') // any other html attriubutes
) ?>
它将根据您配置表单的方式计算出编码和名称属性。