【发布时间】:2013-04-05 21:06:53
【问题描述】:
我是 Symfony 的新手,上传文件时遇到问题
我只是不明白它的工作原理,而且我找不到能准确告诉我如何使用它或告诉我它是如何工作的东西(我已阅读 smyfony 官方文档)
这是我的代码:
表格
class PagosForm extends BasePagosForm
{
public function configure()
{
$this->setWidgets(array('file' => new sfWidgetFormInputFile()));
$this->widgetSchema->setNameFormat('pagos[%s]');
$this->setValidators(array('file' => new sfValidatorFile(array(
'required' => false
))));
}
}
动作
public function executeSelect(sfWebRequest $request)
{
$this->form = new PagosForm();
}
public function executeUpload(sfWebRequest $request)
{
$this->form = new PagosForm();
if ($request->isMethod('post'))
{
$this->form->bind($request->getParameter($this->form->getName()), $request->getFiles($this->form->getName()));
if ($this->form->isValid())
{
echo "isvalid";
move_uploaded_file($_FILES["file"]["tmp_name"], sfConfig::get('sf_upload_dir').'/'.$_FILES["file"]["name"]);
}
else
{
echo "isinvalid";
//echo var_dump($this->form);
}
}
}
在select中,输出了一个选择文件并提交的按钮: 这会将我们带到上传操作。
selectSuccess.php
<?php echo form_tag('pagos/upload', 'enctype="multipart/form-data"', 'method="POST"') ?>
<?php echo $form['file'] ?>
<?php echo submit_tag('Send') ?>
我在使用 eclipse 时遇到了一些问题,所以我使用 Sublime text 2(文本编辑器)进行编码,所以我很难找到错误。
我使用move_uploaded_file 是因为出于某种原因,我无法让它发挥symfony 上传文件的功能。这样就可以搞定了,但是如果要加一些验证(比如只允许上传excel文件)就搞不定了..
我总是打印“isinvalid”行,除非我删除了设置验证器的表单中的行。因此,由于某种原因,验证器无法正常工作..
我也尝试创建自定义验证器,扩展 sfValidatorFile,但根本不起作用(我什至无法上传任何文件或呈现页面)
所以,在我的脑袋爆炸之前我需要一点帮助(由 symfony 引起:P)
代码有什么问题,我总是得到无效文件?我正在尝试上传一个 3 KB 的简单 .txt,如果我删除 valitadion,我可以正常上传
【问题讨论】:
-
如果你是 symfony 的新手,为什么不使用 symfony2 呢?有更多的支持
-
项目要求:/我不能选择它
-
要求使用symfony1.4吗?
-
首先:您应该使用
<?php echo $form->renderHiddenFields() ?>来呈现_csrf_token 字段(和其他隐藏输入)。第二:您应该使用 sfValidatorFile 中的path配置值来处理move_uploaded_file。去there查看文件上传部分(搜索sfWidgetFormInputFile)。 -
@Gonzalo.- wop 抱歉没有看到你的评论 :)
标签: php file-upload symfony-1.4