致命错误:尝试使用Zend Framework 创建表单时,在''modules''Admin''view''Admin''index''login.phtml中对null调用成员函数setAttribute()
有人能帮我找出哪里做错了吗。我粘贴了所有的代码。
'module'Admin'src'Admin'Controller'LoginController.php
class LoginController extends AbstractActionController
{
protected $usersTable = null;
public function indexAction()
{
return new ViewModel();
}
public function loginAction(){
$form = new LoginForm();
$form->get('submit')->setValue('Login');
$request = $this->getRequest();
if($request->isPost()){
$login = new Login();
$form->setInputFilter($login->getInputFilter());
$form->setData($request->getPost());
if($form->isValid()){
$login->exchangeArray($form->getData());
$this->getLoginDetails()->saveLoginForm($login);
// Redirect to list of albums
return $this->redirect()->toRoute('index');
}
}
return array('form' => $form);
}
}
'module'Admin'src'Admin'Form
namespace Admin'Form;
use Zend'Form'Form;
class LoginForm extends Form
{
public function _construct()
{
parent::_construct('admin');
$this->add(array(
'name' => 'username',
'type' => 'Text',
'options' => array(
'label' => 'Username',
'id' => 'txtUsername',
),
));
$this->add(array(
'name' => 'password',
'type' => 'password',
'options' => array(
'label' => 'Password',
'id' => 'txtPassword',
),
));
$this->add(array(
'name' => 'submit',
'type' => 'Submit',
'attributes' => array(
'value' => 'Login',
'id' => 'btnSubmit',
),
));
}
}
'module'Admin'src'Admin'Model
namespace Admin'Model;
use Zend'InputFilter'InputFilter;
use Zend'InputFilter'InputFilterAwareInterface;
use Zend'InputFilter'InputFilterInterface;
class Login implements InputFilterAwareInterface{
public $username;
public $password;
protected $inputFilter;
public function exchangeArray($data)
{
$this->artist = (isset($data['username'])) ? $data['username'] : null;
$this->title = (isset($data['password'])) ? $data['password'] : null;
}
public function setInputFilter(InputFilterInterface $inputFilter){
throw new 'Exception("not used");
}
public function getInputFilter(){
if(!$this->inputFilter){
$inputFilter = new InputFilter();
$inputFilter->add(array(
'name' => 'username',
'required' => true,
'filters' => array(
array('name' => 'StripTags'),
array('name' => 'StringTrim'),
),
'validators' => array(
array(
'name' => 'StringLength',
'options' => array(
'encoding' => 'UTF-8',
'min' => 1,
'max' => 50,
),
),
),
));
$inputFilter->add(array(
'name' => 'password',
'required' => true,
'filters' => array(
array('name' => 'StripTags'),
array('name' => 'StringTrim'),
),
'validators' => array(
array(
'name' => 'StringLength',
'options' => array(
'encoding' => 'UTF-8',
'min' => 1,
'max' => 50,
),
),
),
));
$this->inputFilter = $inputFilter;
}
return $this->inputFilter;
}
'module'Admin'view'admin'index
<?php
$form = $this->form;
$form->setAttribute('action', $this->url('admin', array('action' => 'login')));
$form->prepare();
echo $this->form()->openTag($form);
echo $this->formRow($form->get('username'));
echo $this->formRow($form->get('password'));
echo $this->formSubmit($form->get('submit'));
echo $this->form()->closeTag();
echo $this->$form;
$form=$this->表单是什么?是否用于控制器?你把$this->表单上的任何内容传递到哪里。它为null,就像您看到的错误一样。你可以var_dump($form)来检查它。你需要先用创建你的表单
$form = new 'My'Form();
如果$form在login.phtml中为null,这意味着您没有将$form变量传递给phtml脚本(我们在您的代码中看不到它)
当您想要更改元素属性时,您必须使用getElement函数来获取该元素,然后使用zend表单函数。试试下面的代码,它会为你工作。
$form = new LoginForm();
$form->getElement('submit')->setValue('get');