/** * This is where form elements are defined */ public function generateFields() { // Name field $name = new FormField(FormField::TYPE_TEXT_INPUT); $name->setName('name')->setAttributes(['placeholder' => 'Minta János', 'id' => 'name'])->setMandatory(true); $this->formFields['name'] = $name; // Phone $phone = new FormField(FormField::TYPE_TEXT_INPUT); $phone->setName('phone')->setAttributes(['placeholder' => '+36 30 111 2222', 'id' => 'phone'])->setSanitizationCallback(function ($value) { // only numbers, whitespaces and + return trim(preg_replace($this->phoneNumberPattern, '', $value)); })->setValidationCallback(function ($value) { // Length constrain if (strlen($value) < 5) { return 'Telephone number is not valid'; } // Regex constrain if (preg_match($this->phoneNumberPattern, $value)) { return 'Telephone number is not valid'; } // False means it's OK! return false; })->setMandatory(true); $this->formFields['phone'] = $phone; // Email $email = new FormField(FormField::TYPE_TEXT_INPUT); $email->setName('email')->setAttributes(['placeholder' => '*****@*****.**', 'id' => 'email'])->setMandatory(true)->setSanitizationCallback(function ($value) { return sanitize_email($value); })->setValidationCallback(function ($value) { //var_dump('validating email: '.$value); if (!is_email($value)) { return 'Email is not valid'; } // False means it's OK! return false; }); $this->formFields['email'] = $email; // Submit $submit = new FormField(FormField::TYPE_SUBMIT); $submit->setValue('Elküldöm'); $this->formFields['submit'] = $submit; }
/** * Add CSRF token hidden input field */ private function addCSRFTokenField() { $this->nonceValue = $this->createNonce(); $nonce = new FormField(FormField::TYPE_HIDDEN); $nonce->setName('nonce')->setValue($this->createNonce())->setValidationCallback(function ($value) { if (!isset($_SESSION['csrf_tokens'][$value])) { throw new \Exception('Unauthorized request'); } else { unset($_SESSION['csrf_tokens'][$value]); } return false; })->setMandatory(true); $key = 'nonce'; $this->addField($key, $nonce); }