gpt4 book ai didi

php - 提供给 Escape 助手的对象,但标志不允许在 Zend Framework 2 中递归

转载 作者:行者123 更新时间:2023-12-05 08:58:37 27 4
gpt4 key购买 nike

所以我在一个 Zend Framework 项目中工作并且我正在使用 Doctrine,我创建了我的表单、 Controller 和实体,但是当我运行我的项目时我得到了这个错误:

Object provided to Escape helper, but flags do not allow recursion

这是我的实体:

namespace Application\Entity;

use Doctrine\ORM\Mapping as ORM;
use Zend\Form\Annotation;

/**
* Article
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="Application\Entity\ArticleRepository")
*/
class Article
{
/**
* @ORM\Column(name="publication", type="boolean")
*/
private $publication;

public function __construct()
{
$this->date = new \Datetime();
}
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;

/**
* @var string
*
* @ORM\Column(name="title", type="string", length=255)
*/
private $title;

/**
* @var \DateTime
*
* @ORM\Column(name="date", type="date")
*/
private $date;

/**
* @var string
*
* @ORM\Column(name="content", type="text")
*/
private $content;

/**
* @ORM\OneToOne(targetEntity="Application\Entity\Image", cascade={"persist","remove"})
*/
private $image;

/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}

/**
* Set title
*
* @param string $title
* @return Article
*/
public function setTitle($title)
{
$this->title = $title;

return $this;
}

/**
* Get title
*
* @return string
*/
public function getTitle()
{
return $this->title;
}

/**
* Set date
*
* @param \DateTime $date
* @return Article
*/
public function setDate($date)
{
$this->date = $date;

return $this;
}

/**
* Get date
*
* @return \DateTime
*/
public function getDate()
{
return $this->date;
}

/**
* Set content
*
* @param string $content
* @return Article
*/
public function setContent($content)
{
$this->content = $content;

return $this;
}

/**
* Get content
*
* @return string
*/
public function getContent()
{
return $this->content;
}

/**
* Set publication
*
* @param boolean $publication
* @return Article
*/
public function setPublication($publication)
{
$this->publication = $publication;

return $this;
}

/**
* Get publication
*
* @return boolean
*/
public function getPublication()
{
return $this->publication;
}

/**
* Set image
*
* @param \Application\Entity\Image $image
* @return Article
*/
public function setImage(\Application\Entity\Image $image = null)
{
$this->image = $image;

return $this;
}

/**
* Get image
*
* @return \Application\Entity\Image
*/
public function getImage()
{
return $this->image;
}

}

这是带有字段验证的表单:

class ArticleForm extends Form implements ObjectManagerAwareInterface

{
/**
* @var EntityManager
*/
protected $em;

public function init()
{
$this->add(array(
'name' => 'title',
'attributes' => array(
'type' => 'text',
),
'options' => array(
'label' => 'Title'
),
));

$this->add(array(
'name' => 'id',
'attributes' => array(
'type' => 'hidden',
),
));

$this->add(array(
'name' => 'content',
'attributes' => array(
'type' => 'textera',
),
'options' => array(
'label' => 'Content'
),
));

$this->add(array(
'name' => 'date',
'attributes' => array(
'type' => 'text',
'class' => 'datepicker',
),
'options' => array(
'label' => 'Date',
),
));


$this->add(array(
'name' => 'publication',
'attributes' => array(
'type' => 'Checkbox',
),
));

$this->add(array(
'name' => 'url',
'attributes' => array(
'type' => 'file',
'id' => 'files',
'class'=> 'upload'
),
'options' => array(
'label' => 'Url'
),
));

$this->add(array(
'name' => 'alt',
'attributes' => array(
'type' => 'text',
),
'options' => array(
'label' => 'Alt'
),
));

$this->add(array(
'name' => 'submit',
'attributes' => array(
'type' => 'submit',
'value' => 'Go',
'class' => 'submit',
),
));

$this->setInputFilter($this->createInputFilter());
}

public function __construct($name = null, $options = array())
{
parent::__construct($name, $options);
}

public function createInputFilter()
{
if (!$this->inputFilter) {
$inputFilter = new InputFilter();
$factory = new InputFactory();

$inputFilter->add($factory->createInput(array(
'name' => 'title',
'required' => true,
'filters' => array(
array('name' => 'StripTags'),
array('name' => 'StringTrim'),
),
'validators' => array(
array(
'name' => 'StringLength',
'options' => array(
'encoding' => 'UTF-8',
'min' => 6,
'max' => 100,
),
),
),
)));

$inputFilter->add($factory->createInput(array(
'name' => 'content',
'required' => true,
'filters' => array(
array('name' => 'StripTags'),
array('name' => 'StringTrim'),
),
'validators' => array(
array(
'name' => 'StringLength',
'options' => array(
'encoding' => 'UTF-8',
'min' => 10,
),
),
),
)));

$inputFilter->add($factory->createInput(array(
'name' => 'publication',
'required' => false,
)));

$inputFilter->add($factory->createInput(array(
'name' => 'date',
'required' => true,
)));

$inputFilter->add($factory->createInput(array(
'name' => 'image',
'required' => true,
)));

$this->inputFilter = $inputFilter;
}

return $this->inputFilter;
}

public function setObjectManager(ObjectManager $objectManager) {
$this->objectManager = $objectManager;
}

/**
* Get the object manager
*
* @return ObjectManager
*/
public function getObjectManager() {
return $this->objectManager;
}

}

然后我的行动:

public function addAction()
{
$form = new ArticleForm($this->getObjectManager());
$article = new Article();
$request = $this->getRequest();
$hydrator = new DoctrineHydrator($this->getObjectManager(), get_class($article));
$form->setHydrator($hydrator);
$form->bind($article);
if ($this->zfcUserAuthentication()->hasIdentity()) {
if ($request->isPost())
{
$form->setData($request->getPost());
if ($form->isValid()) {
$this->getObjectManager()->persist($article);
$this->getObjectManager()->flush();

return $this->redirect()->toRoute('blog');
}
}
}
else
{
return $this->redirect()->toRoute('user');
}
return array('form' => $form);
}

最后是我认为我有错误的 View :

 <?php 
$form = $this->form;
$form->setAttribute('action', $this->url('add', array('action' => 'add')));
$form->prepare();
?>
<?php
echo $this->form()->openTag($form);
?>
<ul>
<li>
<?php echo $this->formHidden($form->get('id'));?>
<li>
<li>
<label>Publication:</label>
<?php echo $this->formInput($form->get('publication'));?>
</li>
<li>
<label>Title:</label>
<?php echo $this->formInput($form->get('title'));?>
</li>
// ....
<li>
<?php echo $this->formSubmit($form->get('submit'));?></li>
</ul>
<?php
echo $this->form()->closeTag();
?>

就是这样,这几乎是我的代码,我尝试了一切,但没有找到任何解决方案,我认为这是我认为的错误,所以如果有人有任何想法,我将不胜感激

最佳答案

这可能是因为日期对象。尝试将表单元素的类型更改为最新:

$this->add(array(
'name' => 'date',
'type' => 'Date',
'attributes' => array(
'type' => 'text',
'class' => 'datepicker',
),
'options' => array(
'label' => 'Date',
),
));

关于php - 提供给 Escape 助手的对象,但标志不允许在 Zend Framework 2 中递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22080746/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com