addCSRFProtection不能在public function configure()下工作

时间:2012-05-18 17:59:58

标签: symfony1 symfony-1.4

当我应用此代码时:

class ContactoForm extends BaseContactoForm
{
    public function configure()
    {
        $this->addCSRFProtection(rand(1, 1000));
    }
}

然后我去action.php一个模块:

$this->form = new ContactoForm();

该字段不会更改_csrf_token:

刷新1:

<input type="hidden" id="contacto__csrf_token" value="d6e64fcc34a99c1c90dd95eef945e564" name="contacto[_csrf_token]">

刷新2:

<input type="hidden" id="contacto__csrf_token" value="d6e64fcc34a99c1c90dd95eef945e564" name="contacto[_csrf_token]">

刷新N:

<input type="hidden" id="contacto__csrf_token" value="d6e64fcc34a99c1c90dd95eef945e564" name="contacto[_csrf_token]">

但是,如果我从动作中应用它:

$this->form = new ContactoForm();
$this->form->addCSRFProtection(rand(1, 1000));

如果你改变了

Refresh 1:
<input type="hidden" id="contacto__csrf_token" value="22815f44f18e41947d7568c0771abda4" name="contacto[_csrf_token]">

Refresh 2:
<input type="hidden" id="contacto__csrf_token" value="38bfae0a71a79d16b39ce943658f2700" name="contacto[_csrf_token]">

Refresh 3:
<input type="hidden" id="contacto__csrf_token" value="882c989dc95e40406b28200631cffc3d" name="contacto[_csrf_token]">

在symfony 1.2中,它有效。 现在在symfony 1.4中无效,请帮助我,谢谢。

1 个答案:

答案 0 :(得分:-1)

我不能说我知道symfony,但是从你的例子中可以看出,当你创建一个新的ContactoForm实例时,没有调用configure()。尝试在ContactoForm的构造函数中显式调用它。

class ContactoForm extends BaseContactoForm {
    public function __construct() {
        parent::__construct();  // if there is a parent constructor
        $this->configure();
    }
    public function configure() {
        $this->addCSRFProtection(rand(1, 1000));
    }
}