Php 致命错误:当使用zend framework 2创建表单时,调用null上的成员函数setAttribute()
致命错误:尝试使用Zend Framework创建表单时,在\module\Admin\view\Admin\index\login.phtml中调用null上的成员函数setAttribute() 谁能帮帮我,我哪里做错了。我粘贴了所有的代码Php 致命错误:当使用zend framework 2创建表单时,调用null上的成员函数setAttribute(),php,zend-framework,zend-framework2,Php,Zend Framework,Zend Framework2,致命错误:尝试使用Zend Framework创建表单时,在\module\Admin\view\Admin\index\login.phtml中调用null上的成员函数setAttribute() 谁能帮帮我,我哪里做错了。我粘贴了所有的代码 \module\Admin\src\Admin\Controller\LoginController.php class LoginController extends AbstractActionController { protected $us
\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;
\module\Admin\src\Admin\Controller\LoginController.php
类LoginController扩展AbstractActionController
{
受保护的$usersTable=null;
公共函数索引()
{
返回新的ViewModel();
}
公共函数登录(){
$form=new LoginForm();
$form->get('submit')->setValue('Login');
$request=$this->getRequest();
如果($request->isPost()){
$login=新登录名();
$form->setInputFilter($login->getInputFilter());
$form->setData($request->getPost());
如果($form->isValid()){
$login->exchangearlay($form->getData());
$this->getLoginDetails()->saveLoginForm($login);
//重定向到相册列表
返回$this->redirect()->toRoute('index');
}
}
返回数组('form'=>$form);
}
}
\模块\Admin\src\Admin\Form
名称空间管理\表单;
使用Zend\Form\Form;
类LoginForm扩展了表单
{
公共功能(构造)
{
父项::_构造('admin');
$this->add(数组)(
“名称”=>“用户名”,
'类型'=>'文本',
“选项”=>数组(
“标签”=>“用户名”,
'id'=>'txtUsername',
),
));
$this->add(数组)(
“名称”=>“密码”,
'键入'=>'密码',
“选项”=>数组(
“标签”=>“密码”,
'id'=>'txtPassword',
),
));
$this->add(数组)(
'名称'=>'提交',
'类型'=>'提交',
'属性'=>数组(
'值'=>'登录',
'id'=>'btnSubmit',
),
));
}
}
\模块\Admin\src\Admin\Model
名称空间管理\模型;
使用Zend\InputFilter\InputFilter;
使用Zend\InputFilter\InputFilterAwareInterface;
使用Zend\InputFilter\InputFilterInterface;
类登录实现InputFilterAwareInterface{
公共$username;
公共密码;
受保护的$inputFilter;
公共函数exchangeArray($data)
{
$this->artist=(isset($data['username'])?$data['username']:null;
$this->title=(isset($data['password'])?$data['password']:null;
}
公共函数setInputFilter(InputFilterInterface$inputFilter){
抛出新\异常(“未使用”);
}
公共函数getInputFilter(){
如果(!$this->inputFilter){
$inputFilter=新的inputFilter();
$inputFilter->添加(数组)(
“名称”=>“用户名”,
“必需”=>true,
'过滤器'=>阵列(
数组('name'=>'StripTags'),
数组('name'=>'StringTrim'),
),
“验证程序”=>数组(
排列(
'名称'=>'字符串长度',
“选项”=>数组(
'编码'=>'UTF-8',
“min”=>1,
“最大值”=>50,
),
),
),
));
$inputFilter->添加(数组)(
“名称”=>“密码”,
“必需”=>true,
'过滤器'=>阵列(
数组('name'=>'StripTags'),
数组('name'=>'StringTrim'),
),
“验证程序”=>数组(
排列(
'名称'=>'字符串长度',
“选项”=>数组(
'编码'=>'UTF-8',
“min”=>1,
“最大值”=>50,
),
),
),
));
$this->inputFilter=$inputFilter;
}
返回$this->inputFilter;
}
\模块\Admin\view\Admin\index
什么是$form=$this->form?
是否在控制器中使用?您在哪里传递$this->form上的任何内容。它为null,就像您看到的错误一样。您可以使用var_dump($form)来检查它。您需要首先使用以下命令创建表单:
$form = new \My\Form();
如果login.phtml中的$form为null,这意味着您没有将$form变量传递给phtml脚本(我们在代码中没有看到它)当您要更改元素属性时,您必须使用getElement函数获取该元素,然后使用zend form函数。请尝试下面的代码,它将适用于您
$form = new LoginForm();
$form->getElement('submit')->setValue('get');