好的,所以我来自Flex / ActionScript的背景,因为这个领域正在慢慢消磨,我想把它的时间转移到全职PHP上。
无论如何,我认为我对Zend框架有很好的理解(我工作过的大多数地方都使用它)。但是,他们主要用于表抽象类,所以它实际上不是一个好的MVC实践,更像是模型
接受采访我几乎总会被问到表格验证在哪里发生
现在我知道zend已经建立了形式验证器,我不是在谈论它
我说的是在视图中构建并提交给服务器的标准HTML表单
我想知道的问题是,在控制或模型中做得更好
还有为什么要使用zend_form,对我而言,设计师似乎很难让它变得性感。
答案 0 :(得分:1)
如果要将验证器附加到表单元素,则表单在控制器中验证,并且可以使用简单的if()循环进行检查:
if($form->isValid($postData)) {
//do some stuff
}
否则您可以使用Zend_Filter_Input验证控制器中的简单html表单或其他输入:
//set filters and validators for Zend_Filter_Input
$filters = array(
'id' => array('HtmlEntities', 'StripTags')
);
$validators = array(
'id' => array('NotEmpty', 'Int')
);
//assign Input
$input = new Zend_Filter_Input($filters, $validators);
$input->setData($this->getRequest()->getParams());
if ($input->isValid()) {
//do some stuff
}
无论哪种方式,您都希望在控制器中至少进行基本验证和过滤,以尝试阻止跨站点脚本和SQL注入。
如果需要,您可以随时在域模型中进行更深入的验证和过滤。
至于为什么要使用Zend_Form,它并不像它最初出现的那么糟糕。使用自定义消息附加验证器和过滤器的功能对某些人来说非常有用。一开始很困难的装饰者可以很好地运用实践。你也作弊,只使用viewScript() decorator(就像我通常那样)。 viewScript装饰器以更熟悉的形式提供了大量控制。
以下是一个例子:
//The Form
class Application_Form_Search extends Zend_Form
{
public function init() {
$this->setMethod('POST');
$this->setDecorators(array(
array('ViewScript', array(
'viewScript' => '_searchForm.phtml'//the partial script used as a decorator
))
));
// create new element
$query = $this->createElement('text', 'query');
// element options
$query->setLabel('Search Keywords');
$query->setAttribs(array('placeholder' => 'Artist or Title',
'size' => 27,
));
// add the element to the form
$this->addElement($query);
$submit = $this->createElement('submit', 'search');
$submit->setLabel('Search Site');
$submit->setDecorators(array('ViewHelper'));
$this->addElement($submit);
}
}
部分脚本:
<article class="search">
<form action="<?php echo $this->element->getAction() ?>"
method="<?php echo $this->element->getMethod() ?>">
<table>
<tr>
<th><?php echo $this->element->query->renderLabel() ?></th>
</tr>
<tr>
<td><?php echo $this->element->query->renderViewHelper() ?></td>
</tr>
<tr>
<td><?php echo $this->element->search ?></td>
</tr>
</table>
</form>
</article>
正如您所看到的,代码更熟悉,设计师更容易设计样式。
希望这有帮助,祝你好运......
答案 1 :(得分:0)
验证是模型的一部分,因为它知道验证某些实体但在控制器内部使用的业务逻辑。
Zend_Form带有装饰器,就像ViewScript一样,它使得desinger能够使它变得性感,并使开发人员能够验证,过滤,填充表单输入的微风。