Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Forms Zend form+csrf保护_Forms_Zend Framework_Csrf - Fatal编程技术网

Forms Zend form+csrf保护

Forms Zend form+csrf保护,forms,zend-framework,csrf,Forms,Zend Framework,Csrf,我正试图用crsf令牌保护我的Zend表单。如果我在表单中添加token元素,它总是会向我返回notEmpty错误消息。我做错什么了吗?Thx class Application_Form_Test3 extends Zend_Form { public function init() { $this->setMethod('post'); //..some elements $note = new Zend_Form_Element_Text

我正试图用crsf令牌保护我的Zend表单。如果我在表单中添加token元素,它总是会向我返回notEmpty错误消息。我做错什么了吗?Thx

class Application_Form_Test3 extends Zend_Form {

    public function init() {
        $this->setMethod('post');

//..some elements

        $note = new Zend_Form_Element_Textarea('note');
        $note->addValidator('stringLength', false, array(2, 50));
        $note->setRequired(true);
        $note->class = 'form-control';
        $note->setLabel('Poznámka:');
        $note->setAttrib('placeholder', 'poznamka ke spisu');
        $note->setOptions(array('cols' => '20', 'rows' => '4'));

        $submit = new Zend_Form_Element_Submit('submit');
        $submit->class = 'btn btn-success';
        $submit->setValue('odeslat');

        $this->addElements(array(
            $number,
            $year,
            $owner,
            $note,
            $submit,
        ));

        $this->addElement('hash', 'no_csrf_foo', array('salt' => 'unique'));
    }

}
控制器中的操作:

public function findAction() {
    $request = $this->getRequest();
    $form = new Application_Form_Test3();

    if ($this->getRequest()->isPost()) {
        if ($form->isValid($request->getPost())) {
            var_dump($request->getPost());
        } else {
            var_dump("ERROR");
        }
    }

    $this->view->form = $form;
}
在我看来,我呈现表单并转储错误消息

...
<?php echo $form->renderForm(false); ?>
...
//render single elements here
//eg.  <?php echo $form->note->renderViewHelper(); ?>
...
    <?php var_dump($form->getMessages()) ?>
...

如果我给元素填充了正确的值,最后一个错误总是token-NotEmpty,所以我的表单永远无效。

问题解决了。我没有在视图中呈现令牌元素,因此我在视图中添加了:

<?php echo $form->no_csrf_foo->renderViewHelper(); ?>

CSRF元素如何在表单中显示?您可以编辑问题并添加CSRF令牌的HTML输出吗?是的,问题是我没有呈现令牌元素。我在表单中不使用装饰器,所以我手动渲染视图中的每个元素,所以我忘了渲染csrf令牌。谢谢你的评论,这给了我解决方案。很好的发现:。如果您回答自己的问题,您可以将其设置为“已解决”,则应注意回答此问题的任何其他传入用户:
<?php echo $form->no_csrf_foo->renderViewHelper(); ?>