在zend

时间:2015-07-25 13:17:57

标签: php zend-framework zend-form

我试图在我的Zend Project(v.1.1.12)中创建一个简单的简报订阅表单

此表单将显示在我的index.phtml中。

这是我到目前为止所做的事情: 我在文件夹application / form /

中声明了一个名为Newsletter.php的新表单

它是一个带有提交按钮的简单文本字段

class Form_Newsletter extends Zend_Form
{
 public function init()
 {
    $this->setName('newsletter_subscribe');
    $this->setMethod('post');

    $u_email = new Zend_Form_Element_Text('nl_email');
    $u_email->setRequired(true)
        ->addFilter('StripTags')
        ->addFilter('StringTrim')
        ->addValidator('EmailAddress') ;


    $submit = new Zend_Form_Element_Submit('submit');
    $submit->setAttrib('id', 'submitbutton2');
    $submit->setAttrib('class', 'btn');

        $this->addElements(array($u_email,$submit));
  }
}

下一步,在我的IndexController.php(在application / Controllers下),我声明了我的表单:

public function indexAction()
{   
    //$this->_helper->layout()->setLayout('simplecontent');
    $db=new Db();

    /*Newsletter*/
        $form = new Form_Newsletter();
        $form->submit->setLabel('Valider');
        $this->view->newsletter_form = $form;

        if ($this->getRequest()->isPost()) {
            $formData = $this->getRequest()->getPost();
            if ($form->isValid($formData)) {                
                $email = $form->getValue('nl_email');
                $db->runquery("insert into newsletterrecipients(email)   values(".$email.")");
            } else {
                $form->populate($formData);
            }
        }


}

然后我在我的布局中渲染它:

<div class="newsletter">            
        <?php echo $this->newsletter_form; ?>   
</div>

我想要的只是将提供的电子邮件插入名为&#39; newsletterrecipients&#39;的表中。但是当我提交表格时它没有用,没有记录数据。

感谢您的宝贵帮助

2 个答案:

答案 0 :(得分:0)

第1步:

application.ini

中添加此行
resources.db.adapter = pdo_mysql
resources.db.params.host = yourhostname
resources.db.params.username = yourusername
resources.db.params.password = yourpassword
resources.db.params.dbname = "yourdatabasename"
resources.db.isDefaultTableAdapter = true

第2步:

通过在此处扩展Zend_Db_Table_Abstract来创建您的db-table类:

应用/模型/ DBTABLE / Newsletter.php

<?php

class Application_Model_DbTable_Newsletter extends Zend_Db_Table_Abstract {

    protected $_name = 'your database table name';
}

?>

第3步:

现在,您可以在controller

中创建dbtable对象
$newsletter = new Application_Model_DbTable_Newsletter();
$row = $newsletter->createRow();
$row->email = $email;
$row->save();

这可能对你有所帮助。

答案 1 :(得分:0)

Newsletter文件夹中创建新文件Models

class Application_Model_Newsletter extends Zend_Db_Table_Abstract
{
protected $_name = 'newsletter'; //name of DB table
}

现在在indexAction你可以使用:

$nModel = Application_Model_Newsletter();
if ($this->getRequest()->isPost()) {
    if ($form->isValid($this->getRequest()->getPost())) {                
        $row = $nModel->createRow();
        $row->email = $form->getValue('nl_email');
        $row->save();
    }
}