có cách nào để chuyển biến URL sang hành động biểu mẫu không? Tôi đã có nó làm việc trên một hình thức chi tiết người dùng, nhưng khi tôi đang cố gắng để làm điều đó với một tập tin người dùng tải lên nó sẽ không hoạt động.Đường sọc: Chuyển biến số URL sang biểu mẫu hành động
Như bạn sẽ thấy bên dưới, tôi có biểu mẫu và hành động lưu để lưu chi tiết người dùng. Điều đó hoạt động tốt.
Khi tôi cố gắng chuyển biến URL tới biểu mẫu Tải lên tệp người dùng, nó không hoạt động. Nó nói rằng tôi đang cố gắng để có được một giá trị của một đối tượng không.
// 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;
}
}
Sử dụng ID kỷ lục trong params URL nói chung là một ý tưởng tồi. Người dùng có thể thay đổi Bản ghi thành viên khác thay vì bản thân họ bằng cách thay đổi ID trong URL. Tại sao không sử dụng 'Member :: currentUser' hoặc' HiddenField' với ID thành viên trong đó? –
@ FatalError Tôi có các chức năng được thiết lập chỉ cho phép nhóm "Moderator" thay đổi chi tiết của những người dùng khác. Vì vậy, đó không phải là một vấn đề. Tôi có lẽ phải rõ ràng hơn về những gì tôi đang xây dựng. Tệp tải lên "người kiểm duyệt" cho người dùng khác. Vì vậy, Member :: currentUser không được áp dụng ở đây. Tôi không muốn đính kèm ID của người dùng hiện tại vào một tệp. Tôi muốn thay đổi OwnerID thành ID trong URL. Khi tôi cố gắng sử dụng một trường ẩn, nó nói "không phản đối" sau khi biểu mẫu được gửi. Tôi đã chuyển ID URL cho trường bằng hàm getUser(). – Dallby
Nếu bạn vượt qua User ID trong một trường ẩn, bạn cần phải trả lại bản ghi đó trong hàm gửi '$ ownerMember = Member :: get() -> byID ($ data ['OwnerID']); ' – thezenmonkey