我通常在一个动作中实例化我的表格,这是我在提交时处理它们的地方.然后我将它们传递给视图并像往常一样输出它们.
此表单(搜索框)不同,因为它不是单个页面的一部分.它必须随处可见.我已经把它作为模板的一部分layout.phtml并实例化并在那里访问它.
$search = new SearchForm();
echo $search;
Run Code Online (Sandbox Code Playgroud)
表格打印得很好但现在的问题是我在哪里处理这个表格.我通常在动作中有这样的处理代码.
if ($this->_request->isPost()) {
//and form is valid
//process the data
}
Run Code Online (Sandbox Code Playgroud)
但由于这种形式是普遍的,因此没有任何行动.我该怎么处理?
我是不是该:
我该怎么办?有什么建议吗?
我是新来的,所以我不确定什么是组织我正在尝试做的最好的方法.我指导用户进行一系列测验.mysite.com/quiz1 mysite.com/quiz2 mysite.com/quiz3 mysite.com/quiz4
当用户回答第一个测验时,他被转发到一个页面,告诉他他的答案是否正确,并且在同一页面上他可以选择回答另一个测验.如果他回答,他将再次被带到一个页面,在那里他被告知他的答案是否正确并提交第三个测验.
从架构方面来看,这些quiz1,quiz2等各个页面都被认为是自己的控制器吗?他们的路径说他们可能是,但如果是的话对我没有意义.有没有办法让它们在相同的路径上,但将它们捆绑在同一个控制器中.正如我所说,我是Zend的新手,所以我希望得到一些关于正确方法的反馈意见.
我为电子邮件设置了验证器,因此它不能为空.
这是zend_form生成的常用形式的标记:
<dt id="email-label"><label class="required" for="email">Email</label></dt>
<dd id="email-element">
<input type="text" value="" id="email" name="email">
</dd>
Run Code Online (Sandbox Code Playgroud)
验证失败时,zend_form ul class="errors"在dd中添加一个新内容
<dt id="email-label"><label class="required" for="email">Email</label></dt>
<dd id="email-element">
<input type="text" value="" id="email" name="email">
<ul class="errors">
<li>Value is required and can't be empty</li>
</ul>
</dd>
Run Code Online (Sandbox Code Playgroud)
如何稍微更改此默认行为,以便整个dt dd包装在单个p或something我可以添加错误类?我的猜测是我需要指定zend_form在元素出错时如何表现.
这都是为了阻止Drupal中的SQL注入吗?
db_query('INSERT INTO {tablename} (field1, field2) VALUES ("%s", "%s")', $field1, $field2);
Run Code Online (Sandbox Code Playgroud) Zend为所有表单添加了一个enctype.这有什么用?我该如何删除它?
<form action=""
method="post"
enctype="application/x-www-form-urlencoded"
id="myform">
</form>
Run Code Online (Sandbox Code Playgroud) 在我的控制器/动作中,我可以调用动作助手
$this->_helper->getHelper('layout')->disableLayout();
Run Code Online (Sandbox Code Playgroud)
我想在插件中做同样的事情,所以我尝试了这个,但它不起作用.插件如何访问动作助手?
$controller = $this->getRequest()->getControllerName();
$controller->getHelper('layout')->disableLayout();
Run Code Online (Sandbox Code Playgroud)