在Zend视图助手中,有用于根据路由表输出URL的函数url(),例如
$this->url(array('controller' => 'comments', 'action' => 'add')
Run Code Online (Sandbox Code Playgroud)
如何在控制器中执行相同的操作?特别是我想使用控制器/动作语法而不是标准URL来设置Zend表单的动作URL
$form = new Zend_Form;
$form->setMethod('post')->setAction( $this->url(array('controller' => 'comments', 'action' => 'add')) );
Run Code Online (Sandbox Code Playgroud) 如何在表单已经过验证后向Zend Form元素添加错误消息?
我正在尝试添加我得到的错误消息Zend_Auth(现在我正在使用flashMessenger显示它们).
我试过这样的事情:
$form->getElement('username')->addErrorMessage('my message');
Run Code Online (Sandbox Code Playgroud) 我正在尝试从Zend_Form获取错误消息并将响应作为json.获取Zend_Form错误并以json回复的最佳做法是什么?
<?
class SomeController extends Zend_Controller_Action {
public function indexAction() {
$form = new Application_SomeForm();
if ($form->isValid( $this->getRequest()->getPost() )) {
//do something here
}
$this->_helper->json($form->getErrorMessages());
}
}
Run Code Online (Sandbox Code Playgroud)
我无法通过$form->getErrorMessages()错误获得错误,但如果经过测试则会出现错误print_r($form->gerErrors())
Array
(
[email] => Array
(
[0] => isEmpty
)
[password] => Array
(
[0] => isEmpty
)
[foreign] => Array
(
)
[login] => Array
(
)
)
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是:
a)如何获取表单的所有错误消息?
b)是否有任何Json Wrapper用于处理ajax提交的表格?例如$jsonResponse->setErrorStatus()->addFormErrors($form)
我正在使用Zend Framework 2开发一个应用程序,并使用FormRow帮助器在表单中呈现标签,输入和错误(如果存在).
//within the view
echo $this->formRow($form->get('Name'));
Run Code Online (Sandbox Code Playgroud)
当用户提交表单而不填写所需的输入文本字段FormRow呈现它时出现以下错误消息:
<label>
<span>Name: </span>
<input class="input-error" type="text" value="" placeholder="Insert Name Here" name="Name">
</label>
<ul>
<li>Value is required and can't be empty</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
如何设置li标签的类以便在之后设置样式?
我知道我可以使用所需的类属性来回显formElementErrors ..
<?php echo $this->formElementErrors($form->get("Name"), array('class' => "valuerequired", 'message' => "errortestmessage")); ?>
Run Code Online (Sandbox Code Playgroud)
..但FormRow仍然会在没有类的情况下呈现错误消息.
仅供参考我以这种方式设置实体:
public function getInputFilter()
{
if (!$this->inputFilter) {
$inputFilter = new InputFilter();
$factory = new InputFactory();
$inputFilter->add($factory->createInput(array(
'name' => 'Name',
'required' => true,
'filters' => array(
array('name' => 'StripTags'),
array('name' …Run Code Online (Sandbox Code Playgroud) 目前,我有文章和标签表.我试图自动填充"标签"表单元素作为文章表单上的选择框.从数据库表中设置标签选择框的值选项的最佳方法是什么,然后让文章在"绑定"方法调用期间自动绑定标签数据?
Article.php
<?php
// Article class
class Article {
/**
*
* @var \Doctrine\Common\Collections\Collection|Tag[]
*
* @ORM\ManyToMany(targetEntity="Tag", inversedBy="articles")
* @Orm\JoinTable(name="rel_article_tag", joinColumns={@ORM\JoinColumn(name="article_id", referencedColumnName="article_id")}, inverseJoinColumns={@ORM\JoinColumn(name="tag_id", referencedColumnName="tag_id")})
*
* @Form\Required(false)
* @Form\Type("Zend\Form\Element\Select")
* @Form\Options({"label":"Tags: ")
* @Form\Attributes({"id":"tags", "data-placeholder":"Choose tags...", "multiple" : "multiple", "class" : "chosen-select"})
*/
private $tags;
public function __construct()
{
$this->tags = new ArrayCollection();
}
public function getTags()
{
return $this->tags;
}
public function addTags($tags)
{
$this->tags = $tags;
}
public function removeTags()
{
$this->tags = new ArrayCollection();
}
}
Run Code Online (Sandbox Code Playgroud)
ArticleController.php …
php zend-form zend-form-element doctrine-orm zend-framework2
我在我的视图中渲染了一个Zend_Form_Element_Select.
$t=new Zend_Form_Element_Select(....);
...
...
echo $t->render();
Run Code Online (Sandbox Code Playgroud)
我得到了正确的下拉和选项,但我也得到了包含的select元素
<dt> </dt>
<dd>[elm]</dd>
Run Code Online (Sandbox Code Playgroud)
如何删除该装饰器?
在我的表单中,我试图验证用户两次都填写相同的值(以确保他们没有犯错).我认为这Zend_Validate_Identical是为了什么,但我不太确定如何使用它.这是我到目前为止所得到的:
$this->addElement('password', 'password', array(
'label' => 'Password:',
'required' => true,
'validators' => array(
'Identical' => array(What do I put here?)
)
));
$this->addElement('password', 'verifypassword', array(
'label' => 'Verify Password:',
'required' => true,
'validators' => array(
'Identical' => array(What do I put here?)
)
));
Run Code Online (Sandbox Code Playgroud)
我需要两个元素吗?我在阵列中放了什么?
这些行为或输出之间是否有任何真正的区别.他们看起来像他们做同样的事情.
->addValidator('NotEmpty')
->setRequired(true)
Run Code Online (Sandbox Code Playgroud) 我正在处理提交的Zend表单,该表单使用以下代码更新Doctrine Record,其中$ query是使用doctrine查询构建器构建的查询:
$record_array = $query->getResult();
$this->_record = $record_array[0];
if($this->getRequest()->isPost())
{
if ($this->_form->isValid($this->_request->getPost()))
{
$newEntity = $this->_form->update($this->_record);
$this->_em->flush();
$this->view->success = 'Record Saved.';
} else {
$this->view->errors = $this->_form->getErrors();
}
}
Run Code Online (Sandbox Code Playgroud)
如果记录中没有整数,则上述工作正常,即只有字符串.但是,如果我在表单中包含在doctrine实体中映射为整数的字段,我会得到上面的错误.
任何帮助,将不胜感激.
更新:
/**
* @var integer $solicitorid
*
* @Column(name="SolicitorID", type="integer", nullable=false)
* @Id
* @GeneratedValue(strategy="IDENTITY")
*/
private $solicitorid;
/**
* @var string $solicitor
*
* @Column(name="Solicitor", type="string", length=160, nullable=true)
*/
private $solicitor;
/**
* @var string $address
*
* @Column(name="Address", type="string", length=160, nullable=true)
*/
private $address;
/**
* …Run Code Online (Sandbox Code Playgroud) 如何用$ this-> formSelect()创建它?
<select multiple>
<optgroup label="a">
<option>1</option>
<option>2</option>
</optgroup>
<optgroup label="b">
<option>1</option>
</optgroup>
</select>
Run Code Online (Sandbox Code Playgroud)