I have a homepage which I want a registration form on, to do this I am using Zend_View_Helper. However nothing is happening.. I cant see the form I am trying to get on that page.
Here's the helper 'Register.php':
<?php
class Zend_View_Helper_Register extends Zend_View_Helper_Abstract {
public function register(){
$request = Zend_Controller_Front::getInstance()->getRequest();
$controller = $request->getControllerName();
$action = $request->getActionName();
if ($controller == 'register' && $action == 'index') {
return '';
}
}
}
Here's the form Register.php:
<?php
class Application_Form_Register extends Zend_Form
{
public function init() {
$this->setName('register');
$id = new Zend_Form_Element_Hidden('id');
$id->addFilter('Int');
$first_name = new Zend_Form_Element_Text('first_name');
$first_name->setLabel('Firstname')
->setRequired(true)
->addFilter('StripTags')
->addFilter('StringTrim')
->addValidator('NotEmpty');
$surname = new Zend_Form_Element_Text('surname');
$surname->setLabel('Surname')
->setRequired(true)
->addFilter('StripTags')
->addFilter('StringTrim')
->addValidator('NotEmpty');
$email = new Zend_Form_Element_Text('email');
$email->setLabel('Email')
->setRequired(true)
->addFilter('StripTags')
->addFilter('StringTrim')
->addValidator('NotEmpty');
$username = new Zend_Form_Element_Text('username');
$username->setLabel('Username')
->setRequired(true)
->addFilter('StripTags')
->addFilter('StringTrim')
->addValidator('NotEmpty');
$password = new Zend_Form_Element_Text('password');
$password->setLabel('Password')
->setRequired(true)
->addFilter('StripTags')
->addFilter('StringTrim')
->addValidator('NotEmpty');
$age = new Zend_Form_Element_Text('age');
$age->setLabel('Age')
->setRequired(true)
->addFilter('StripTags')
->addFilter('StringTrim')
->addValidator('NotEmpty');
$gender = new Zend_Form_Element_Text('gender');
$gender->setLabel('Gender')
->setRequired(true)
->addFilter('StripTags')
->addFilter('StringTrim')
->addValidator('NotEmpty');
$uni = new Zend_Form_Element_Text('pic_2');
$uni->setLabel('Uni')
->setRequired(true)
->addFilter('StripTags')
->addFilter('StringTrim')
->addValidator('NotEmpty');
$submit = new Zend_Form_Element_Submit('submit');
$submit->setAttrib('id', 'submitbutton');
$this->addElements(array($id, $firstname, $surname, $email, $username, $password, $age, $gender, $uni, $submit));
}
}
Here's the model 'Users.php'
<?php
class Application_Model_DbTable_Users extends Zend_Db_Table_Abstract
{
protected $_name = 'users';
public function addUser($first_name, $surname, $email, $username, $password, $age, $gender, $uni) {
$data = array(
'first_name' => $first_name,
'surname' => $surname,
'email' => $email,
'username' => $username,
'password' => $password,
'age' => $age,
'gender' => $uni,
);
$this->insert($data);
}
}
The controller 'RegisterController.php'
<?php
class RegisterController extends Zend_Controller_Action
{
public function init()
{
/* Initialize action controller here */
}
public function indexAction()
{
$form = new Application_Form_Register();
$form->submit->setLabel('Register');
$this->view->form = $form;
if ($this->getRequest()->isPost()) {
$formData = $this->getRequest()->getPost();
if ($form->isValid($formData)) {
$first_name = $form->getValue('first_name');
$surname = $form->getValue('surname');
$email = $form->getValue('email');
$username = $form->getValue('username');
$password = $form->getValue('password');
$age = $form->getValue('age');
$gender = $form->getValue('gender');
$uni = $form->getValue('uni');
$register = new Application_Model_DbTable_Users();
$register->addUser($first_name, $surname, $email, $username, $password, $age, $gender, $uni);
$this->_helper->redirector('index');
} else {
$form->populate($formData);
}
}
}
}
And finally the view:
<div id="register">
<h2>Register</h2>
<?php echo $this->register(); ?>
</div>
I am aware that I should never be passing passwords in plain text, my next question is how to handle this.
Your view helper doesn't appear to be doing anything useful. I'm assuming you want it to render the form. If so it should look like this:-
class Zend_View_Helper_Register extends Zend_View_Helper_Abstract {
public function register()
{
$request = Zend_Controller_Front::getInstance()->getRequest();
$controller = $request->getControllerName();
$action = $request->getActionName();
if ($controller == 'register' && $action == 'index') {
return $this->view->form;
}
}
}
Having said that, you don't need a helper for this really. In your view just put:-
echo $this->form
And your form will render.
You would use a view helper if you wanted a form (say a log out form) on every page in your site.
Finally resolved in chat.