更改ZF2中CSRF元素的超时

时间:2017-11-06 16:12:46

标签: php zend-framework2 csrf zend-form

请考虑我是Zend的新手。 我的应用定义了多个表单。所有这些都扩展了另一个Form'FormParent.php'。

FormParent.php声明一个超时为10分钟的Csrf元素:

using Newtonsoft.Json;

public class RootObject
{
    [JsonProperty("images")]
    public Image[] Images { get; set; }

    [JsonProperty("images_processed")]
    public long ImagesProcessed { get; set; }
}

public class Image
{
    [JsonProperty("faces")]
    public Face[] Faces { get; set; }

    [JsonProperty("resolved_url")]
    public string ResolvedUrl { get; set; }

    [JsonProperty("source_url")]
    public string SourceUrl { get; set; }
}

public class Face
{
    [JsonProperty("age")]
    public Age Age { get; set; }

    [JsonProperty("face_location")]
    public FaceLocation FaceLocation { get; set; }

    [JsonProperty("gender")]
    public Gender Gender { get; set; }

    [JsonProperty("identity")]
    public Identity Identity { get; set; }
}

public class Identity
{
    [JsonProperty("name")]
    public string Name { get; set; }

    [JsonProperty("score")]
    public double Score { get; set; }
}

public class Gender
{
    [JsonProperty("gender")]
    public string PurpleGender { get; set; }

    [JsonProperty("score")]
    public double Score { get; set; }
}

public class FaceLocation
{
    [JsonProperty("height")]
    public long Height { get; set; }

    [JsonProperty("left")]
    public long Left { get; set; }

    [JsonProperty("top")]
    public long Top { get; set; }

    [JsonProperty("width")]
    public long Width { get; set; }
}

public class Age
{
    [JsonProperty("max")]
    public long Max { get; set; }

    [JsonProperty("min")]
    public long Min { get; set; }

    [JsonProperty("score")]
    public double Score { get; set; }
}

在视图中,csrf添加了:

 $this->add(array(
            'name' => 'csrf_parent',
            'type' => 'Zend\Form\Element\Csrf',
            'options' => array(
                 'csrf_options' => array(
                        'timeout' => 600
                 )
            ),
    ));

现在我需要为其中一个表单设置一个更高的超时(15分钟),但是我有点困惑,因为我看到至少有3种方法实现了这个(在视图中):

1)setOptions():

<?php echo $this->formElement($form->get('csrf_parent')); ?>

2)setCsrfValidator():

$csrf = $form->get('csrf_parent');
$csrf->setOptions(array('csrf_options' => array('timeout' => 900)));

3)setTimeout():

$csrf = $form->get('csrf_parent');
$csrf->setCsrfValidator(new Zend\Validator\Csrf(array('csrf_options' => array('timeout' => 900)));

我应该使用哪一个?这三个人都是? 此外,似乎只设置其中一个属性不会更新其他属性,我最终可以使用CSRF,例如:

$validator = $form->get('csrf_parent')->getCsrfValidator();
$validator->setTimeout(900);

0 个答案:

没有答案