我想做的就是在Zend Framework中创建一个如下所示的表单:
<p id="foo">
<form action="#" method="post">
<label>Start:</label>
<input id="start" type="text" name="start" />
<label>End:</label>
<input id="end" type="text" name="end" />
<input type="submit" name="submit" value="Submit" />
</form>
</p>
我根本做不到。 :(我可以坚持在这样的视图,但后来我没有得到验证和过滤。
有关如何找出装饰器和Zend_Form的任何提示?
答案 0 :(得分:1)
如果您习惯使用视图但还需要验证和过滤功能,您仍然可以使用Zend Form。
class Default_Form_Search extends Zend_Form
{
public function init()
{
$start = new Zend_Form_Element_Text('start');
$start->setRequired(true)
->addValidator('Date', false, array('format' => 'YYYY-MM-dd'))
->setDecorators(array(
array('ViewHelper')
));
$this->addElement($start);
// For end
}
}
在您的控制器中:
$form = new Default_Form_Search;
$form->setAction('/search');
if ($this->getRequest()->isPost())
{
if ($form->isValid($this->getRequest()->getPost())
{
// Search here
}
{
var_dump($form->getMessages();
}
}
$this->view->form = $form;
然后在您的视图中,您只需按原样形成HTML,但输出如下元素:
<p id="foo">
<form action="<?php echo $this->form->getAction() ?>" method="post">
<label>Start:</label>
<?php echo $this->form->start ?>
<label>End:</label>
<?php echo $this->form->end ?>
<input type="submit" name="submit" value="Submit" />
</form>
</p>
答案 1 :(得分:1)
这很有效。我已经从我正在使用的表格中对其进行了调整,因此我坚持使用ID等其他一些内容,如果您愿意,可以使用。无论如何,看看它们如何结合在一起很有用:
在我的控制器中:
private function _theForm() {
$form = new Zend_Form;
$form->setAction('/controller/action')
->setMethod('post')
->addAttribs(array('id' => 'an_id_for_the_form'));
$form->addElement('text', 'start', array(
'validators' => array(
'NotEmpty'
),
'label' => 'Start:',
'id' => 'someid',
'required' => true,
'decorators' => array(
'ViewHelper',
'Errors',
'Label',
),
));
$form->addElement('text', 'end', array(
'validators' => array(
'NotEmpty'
),
'label' => 'End:',
'id' => 'someotherid_if_you_like',
'required' => true,
'decorators' => array(
'ViewHelper',
'Errors',
'Label',
),
));
$form->addElement('submit', 'submitSomething', array(
'label' => 'Submit',
'decorators' => array(
'ViewHelper',
)
));
$form->setDecorators(array(
'FormElements',
array('HtmlTag', array('tag' => 'p', 'id' => 'foo')),
'Form',
));
return $form;
}
然后我在控制器的其他地方调用,例如:
$form = $this->_theForm();
$this->view->form = $form;
然后你可以在你的视图中使用它,如:
<?php echo $this->form; ?>
答案 2 :(得分:0)
以下是我如何创建Zend表单的示例:
class Mobile_Form_Login extends Zend_Form
{
public function init()
{
$this->setName('authenticate');
$nick = $this->createElement('text', 'nick');
$nick->setRequired(true);
$nick->addValidators(array(
new Zend_Validate_StringLength(3, 10),
));
$pass = $this->createElement('password', 'password');
$pass->setAttrib('size', 10);
$pass->setRequired(true);
$pass->addValidators(array(
new Zend_Validate_StringLength(6, 128),
));
$this->addElements(array($nick, $pass));
}
}
后来,在我的控制器中
$form = new Mobile_Form_Login();
if (!$form->isValid($_POST)) {
// handle errors
}
// else render()