У меня есть форма аутентификации, пользователь должен представить свое имя пользователя и пароль, а информацию принять или отклонить через базу данных. Я смотрел Zend Framework 1.8, учебное пособие 4 zend_auth и zend_form часть 3 но моя система имеет ошибку:
Сообщение: элемент должен быть указан строкой или экземпляром Zend_Form_Element
Это моя форма: login.php (Приложение / форма / login.php)
<?php
Class Application_Form_Login extends Zend_Form
{
public function __construct($option = null)
{
parent::__construct($option);
$this->setName('login');
$username = new Zend_Form_Element_Text('username');
$username->setLabel('User name:')
->setRequired();
$password = new Zend_Form_Element_Password('password');
$password->setLabel('Password:')
-> setRequired('true');
$login = new Zend_Form_Element_Submit('login');
$login ->setLabel('Login');
$this ->addElement(array($username,$password,$login));
$this->setMethod('post');
$this->setAction('/authentication/login');
}
}
а это AuthenticationController.php (Приложение / контроллер / AuthenticationController.php)
<?php
class AuthenticationController extends Zend_Controller_Action
{
public function loginAction()
{
$form = new Application_Form_Login();
$this->view->form = $form;
$authAdapter = $this->getAuthAdapter();
$username='john';
$password = 'pass1';
$authAdapter->setIdentity($username)
->setCredential($password);
$auth= Zend_Auth::getInstance();
$result = $auth->authenticate($authAdapter);
if ($result->isValid())
{
$identity = $authAdapter->getResultRowObject();
$authStorage = $auth->getStorage();
$authStorage->write($identity);
$this->_redirect('index/index');
}
else
{
echo "invalid";
}
}
private function getAuthAdapter()
{
$authAdapter = new Zend_Auth_Adapter_DbTable(Zend_Db_Table::getDefaultAdapter());
$authAdapter->setTableName('users')
->setIdentityColumn('username')
->setCredentialColumn('password');
return $authAdapter;
}
}
И посмотреть так:
<?php
echo $this->form;
попробуйте добавить элементы через $this->addElements(array($username,$password,$login));
метод addElement (без s) может обрабатывать только один элемент
Других решений пока нет …