아래에 따라를 만들고 Register_Controller
설정했습니다 route
. RegisterForm은 잘 렌더링되지만 '등록'을 클릭하면 다음 URL로 이동하고 http://website.com/Register_Controller/RegisterForm
'페이지를 찾을 수 없음'을 표시하므로 doRegister
메소드에 맞지 않습니다 .
내가 도대체 뭘 잘못하고있는 겁니까?
Routes.yml
---
Name: mysiteroutes
After: framework/routes#coreroutes
---
Director:
rules:
'register': 'Register_Controller'
Register_Controller.php
<?php
class Register_Controller extends Page_Controller {
private static $allowed_actions = array(
'RegisterForm'
);
public function index() {
return $this->renderWith(array('RegisterPage', 'Page'));
}
public function RegisterForm(){
return new RegisterForm($this, 'RegisterForm');
}
}
RegisterForm.php
<?php
class RegisterForm extends Form {
public function __construct($controller, $name) {
$fields = new FieldList(
TextField::create('FirstName'),
TextField::create('Surname'),
TextField::create('Email'),
PasswordField::create('Password'),
PasswordField::create('ConfirmPassword'),
TextField::create('Username')
);
$actions = new FieldList(
new FormAction('doRegister', 'Register')
);
$validator = new RequiredFields(
'Email', 'Password', 'ConfirmPassword', 'Username'
);
parent::__construct($controller, $name, $fields, $actions, $validator);
$this->disableSecurityToken();
if (Session::get('RegisterFormData')) {
$this->loadDataFrom(Session::get('RegisterFormData'));
}
}
public function doRegister($data, $form) {
$checkIfEmailExsists = Member::get()->filter('Email', $data['Email'])->first();
$registerFormData = Session::set('RegisterFormData', $data);
if ($checkIfEmailExsists) {
$form->addErrorMessage('Email', 'This email already exists', 'bad');
return $this->controller->redirectBack();
}
$member = new Member();
$form->saveInto($member);
$password = $data['Password'];
$member->changePassword($password);
$member->write();
$member->addToGroupByCode('administrators', 'Administrators');
$member->logIn();
Session::clear('RegisterFormData');
return $this->controller->redirect($this->controller->Link('thanks'));
}
}
RegisterPage.ss
<h2>Register Here</h2>
$RegisterForm
양식이 컨트롤러에서 기본 링크를 가져 오려고하지만 사용자 지정 경로 컨트롤러에서 찾을 수 없기 때문에 컨트롤러 이름을 사용합니다. Link () 메서드를 추가해야합니다.
class Register_Controller extends Page_Controller {
public function Link($action = null) {
return Controller::join_links(Director::baseURL(), '/register/', $action);
}
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다