请考虑我是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);