gpt4 book ai didi

php - 使用需要自定义实现 Field() 的自定义表单上传字段

转载 作者:搜寻专家 更新时间:2023-10-31 21:23:45 27 4
gpt4 key购买 nike

我的系统中有一些自定义路由:

---
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,然后获取名称为 Uploadfield 并调用方法 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/

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