URL 변수를 양식 작업에 전달하는 방법은 무엇입니까? 사용자 세부 정보 형식으로 작업하고 있지만 사용자 파일 업로드로 작업하려고하면 작동하지 않습니다.Silverstripe : 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 PARAMS에서 레코드 ID를 사용 :
여기에 업로드 양식 기능의 작업 코드입니다. 사용자는 URL의 ID를 변경하여 다른 회원 레코드를 변경합니다. 'Member :: currentUser' 또는 멤버 ID가있는'HiddenField'를 왜 사용하지 않을까요? –
@FatalError "Moderator"그룹 만 다른 사용자의 세부 정보를 변경할 수있는 기능을 설정했습니다. 그래서 그게 문제가 아니에요. 내가 만드는 것에 대해서는 분명히 분명히해야했습니다. "운영자"는 다른 사용자의 파일을 업로드합니다. 따라서 Member :: currentUser는 여기에 적용되지 않습니다. 현재 사용자의 ID를 파일에 첨부하고 싶지 않습니다. OwnerID를 URL에있는 ID로 변경하고 싶습니다. 숨겨진 필드를 사용하려고하면 양식을 제출 한 후 "비 개체"라고 표시됩니다. getUser() 함수를 사용하여 필드에 URL ID를 전달했습니다. – Dallby
숨겨진 필드에 사용자 ID를 전달하면 제출 기능'$ ownerMember = Member :: get() -> byID ($ data [ 'OwnerID']); ' – thezenmonkey