作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我的系统中有一些自定义路由:
---
Name: mysiteroutes
---
Director:
rules:
'create//$Action': 'CreateController'
它有一个自定义 Controller 来创建一个表单:
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);
}
}
当我尝试上传某些内容时,它会在我的 Controller 上调用 Field()
,然后由于不存在而失败。我可以添加它并正确调用它,但我不知道要放入什么。我查看了 UploadField.php
中的 Field()
函数,但是那里有很多代码,我可能不应该只复制它们。
我应该如何在我的自定义 Controller 中管理文件的上传,或者我能否以某种方式将它转发到核心框架?
最佳答案
UploadField 期望有一个基于表单名称的路由,在您的例子中是 ''
。如果您将表单的名称更改为 form
,它将调用 form/field/Upload/upload
。它所做的是获取 form
,然后获取名称为 Upload
的 field
并调用方法 upload
那个类(class)。
不幸的是,您使用表单的方式(我在之前的回答中向您展示过 :( ) 不支持这一点。
我们可以这样解决;
创建 Controller
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);
}
}
表单
// create an extra class for the form to keep your controller clean
class UploadForm extends Form
{
public function __construct($controller, $name, $action)
{
$fields = FieldList::create(
TextField::create('Name', 'Name'),
UploadField::create('Upload', 'Upload')
);
$actions = FieldList::create(
FormAction::create($action, 'Submit')
->setAttribute('class', 'btn btn-success')
);
$validator = RequiredFields::create('Name');
parent::__construct($controller, $name, $fields, $actions, $validator);
}
}
关于php - 使用需要自定义实现 Field() 的自定义表单上传字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40837021/
我有以下正则表达式 /[a-zA-Z0-9_-]/ 当字符串只包含从 a 到z 大小写、数字、_ 和 -。 我的代码有什么问题? 能否请您向我提供一个简短的解释和有关如何修复它的代码示例? //var
我是一名优秀的程序员,十分优秀!