我的系统中有一些自定义路线:
---
Name: mysiteroutes
---
Director:
rules:
'create//$Action': 'CreateController'
其中有一个自定义控制器来创建表单:
class CreateController extends Page_Controller{
private static $allowed_actions = array(
'submit'
);
public function link($action = null) {
return $this->join_links('create/', $action);
}
public function index() {
$form = Form::create(
$this,
'',
FieldList::create(
TextField::create('Name', 'Name'),
$upload = new UploadField('Upload', 'Upload')
),
FieldList::create(
FormAction::create('submit', 'Submit')->setAttribute('class', 'btn btn-success')
),
RequiredFields::create('Name')
);
if($this->request->isPost()) return $form;
return $this->customise(array('Form'=>$form))->renderWith(array("Create", "Page"));
}
public function submit($data, $form = null) {
$params = $this->getRequest()->params();
var_dump($params);
}
}
当我尝试上传某些内容时,它会在我的控制器上调用Field()
然后失败,因为它不在那里。我可以添加它并正确调用它但是我不知道该放入什么。我已查看了Field()
中的UploadField.php
函数,但是有很多代码我可能不应该复制。
我应该如何在自定义控制器中管理文件的上传,还是可以以某种方式将其转发到核心框架?
答案 0 :(得分:1)
UploadField期望在您的案例''
中拥有基于表单名称的路由。
如果您要将表单的名称更改为form
,则会调用form/field/Upload/upload
。这样做是获取form
,然后获取名为field
的{{1}}并在该类上调用方法Upload
。
不幸的是,你使用表单的方式(我在之前的回答中给你看:()不支持这个。
我们可以像这样解决它;
<强> CreateController 强>
upload
<强>表格强>
class CreateController extends Page_Controller
{
private static $allowed_actions = [
'form'
];
public function link($action = null)
{
return $this->join_links('create', $action);
}
public function index()
{
return $this->renderWith(array("Create", "Page"));
}
public function form()
{
return UploadForm::create($this, 'form', 'submit');
}
public function submit($data, $form = null)
{
$params = $this->getRequest()->params();
var_dump($params);
}
}