gpt4 book ai didi

php - Silverstripe:将 URL 变量传递给表单操作

转载 作者:可可西里 更新时间:2023-11-01 12:59:44 25 4
gpt4 key购买 nike

有没有办法将 URL 变量传递给表单操作?我已经让它在用户详细信息表单上工作,但是当我尝试通过用户文件上传来做到这一点时,它不起作用。

正如您将在下面看到的,我有一个表单和一个用于保存用户详细信息的保存操作。这很好用。

当我尝试将 URL 变量传递给用户文件上传表单时,它不起作用。它说我正在尝试获取非对象的值。

// Get Client ID from URL Parameters
public function getUser() {
if( isset($this->urlParams['ID']) && is_numeric($this->urlParams['ID']) ) {
return $user = Member::get()->byID($this->urlParams['ID']);
} else {
return $user = $this->request->postVars();
}
}

// Edit/Save a User's details
public function EditUserDetails() {
//Include JS for updating details
Requirements::javascript('module-memberprofiles/javascript/MemberProfileUpdate.js');
Requirements::set_force_js_to_bottom(true);

$fields = new FieldList(
$leftCol = CompositeField::create(
TextField::create('FirstName', 'First Name')
->setFieldHolderTemplate('UserDetails_FieldHolder'),
TextField::create('Surname', 'Surname')
->setFieldHolderTemplate('UserDetails_FieldHolder'),
CompositeField::create(
TextField::create('Address', ''),
TextField::create('Suburb', ''),
CompositeField::create(
DropdownField::create('State', '', singleton('Member')->dbObject('State')->enumValues())->setFieldHolderTemplate('UserDetails_StatePostCode'),
TextField::create('PostCode', '')->setFieldHolderTemplate('UserDetails_StatePostCode')
)->addExtraClass('row')
)
->addExtraClass('userdetails-address wrap')
->setFieldHolderTemplate('UserDetails_AddressHolder'),
TextField::create('Phone', 'Phone')
->setFieldHolderTemplate('UserDetails_FieldHolder'),
TextField::create('Email', 'Email')
->setFieldHolderTemplate('UserDetails_FieldHolder')
)->setFieldHolderTemplate('UserDetails_CompositeField')
);

$actions = new FieldList(new FormAction('SaveUserDetails', 'Save Profile'));
$validation = new RequiredFields(array('FirstName','Surname','Email'));

$form = new Form ( $this, 'EditUserDetails', $fields, $actions, $validation);
$form->loadDataFrom($this->getUser());
$form->setTemplate('MemberProfilePage_UserDetailsForm');
return $form;
}

public function SaveUserDetails($data, $form) {
$table = Member::get()->byID($this->getUser());

$members = Member::get();
$emailExists = $members->filter(array(
'Email' => $data['Email'],
'ID:not' => $table->ID
));

if( $emailExists->count() > 0 ) {
$form->sessionMessage('Sorry, that email address already exists. Please try again','bad');
return $this->redirectBack();
} else {
$form->sessionMessage('You have successfully updated this user\'s details.','good');
}

$form->saveInto($table);
$table->write();
$this->redirectBack();

return $this;
}

//User file upload function
public function UploadUserFile() {

$fields = FieldList::create(
FileField::create('UserFiles', 'Upload files')
);

$actions = FieldList::create(FormAction::create('SaveUserFile', 'Upload files'));

$form = Form::create($this, __FUNCTION__, $fields, $actions, null);

$form->loadDataFrom($this->getUser());

return $form;
}

//Refresh files function
public function SaveUserFile($data, $form) {

$up = new Upload();

$file = Object::create('File');
$file->setFileName('newname');
$up->loadIntoFile($data['UserFiles'], $file, 'User-Files');

if($up->isError()) {
//handle error here
//var_dump($up->getErrors());
}else {
//file uploaded
//$file->OwnerID = 3;
//$file->write();

//$this->redirectBack();
return $this;
}
}

最佳答案

好的,我设法解决了这个问题......

我必须设置一个表单操作来将上传功能定向到正确的 URL。当我单击提交时,ID 似乎已从 URL 中删除,因此“getUser”函​​数看不到该值。

这是上传表单功能的工作代码:

public function UploadUserFile() {

$fields = FieldList::create(
FileField::create('UserFiles', 'Upload files'),
HiddenField::create('ID','',$this->getUser()->ID)
);

$actions = FieldList::create(
FormAction::create('SaveUserFile', 'Upload files')
->addExtraClass('button rounded solid')
);

$form = Form::create($this, 'UploadUserFile', $fields, $actions);
$form->setFormAction($this->Link().'UploadUserFile/'.$this->getUser()->ID);

return $form;
}

关于php - Silverstripe:将 URL 变量传递给表单操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39220541/

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