我从symfony开始,我想像树一样构建我的网站架构,并递归调用一些方法来使用Twig进行渲染。 但我有一个错误,它显示:“ContextErrorException:注意:未定义的索引:D:\ Documents \ site_cdm \ vendor \ doctrine \ orm \ lib \ Doctrine \ ORM \ Internal \ Hydration \ ObjectHydrator.php第269行”中的文本< / p>
当我想知道chidren项目是否有孩子时,会触发此错误。
{% if root.children is not empty %}
{% for item in root.children %}
{% if item.children is not empty %}<-- the error is trigged here!
<li class="dropdown"><a href="{{ path('cdm_site_article_id', { 'id': item.id }) }}" class="dropdown-toggle" data-toggle="dropdown">{{ item.name }}</a>
{{ include('cdmSiteBundle:Component:menu.html.twig', {'root': item, 'cssClass':"dropdown-menu"}) }} </li>
{% else %}
<li><a href="{{ path('cdm_site_article_name', { 'name': item.name }) }}">{{ item.name }}</a></li>
{% endif %}
{% endfor %}
{% endif %}
我不能得到item.id但是item.name是。
你能帮帮我吗?)
我对建筑的看法: http://imageshack.com/a/img836/7014/e55d.png
我的数据库的逆向工程: http://imageshack.com/a/img834/4026/ktp3.png
Controller中的buildMenuAction:
class ComponentController extends Controller
{
public function buildMenuAction()
{
$repository = $this->getDoctrine()
->getManager()
->getRepository('cdmSiteBundle:Category');
$root = $repository->findOneByName('root');
echo $root->getId();
return $this->render('cdmSiteBundle:Component:menu.html.twig', array(
'root'=>$root,
'cssClass'=>"nav navbar-nav"
));
}
实体模块:
use Doctrine\ORM\Mapping as Orm;
use Doctrine\Common\Collections\ArrayCollection;
/**
* @ORM\Entity
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="discr", type="string")
* @ORM\DiscriminatorMap({"category" = "Category", "article" = "Article", "item" = "Item"})
*/
class Module {
/**
* @ORM\Id
* @ORM\Column(type="integer", nullable=false)
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="Module", inversedBy="children")
* @ORM\JoinColumn(name="parent_id", referencedColumnName="id")
**/
private $parent;
/**
* @ORM\OneToMany(targetEntity="Module", mappedBy="parent")
**/
private $children;
public function __construct()
{
$this->children = new ArrayCollection();
}
实体文章:
namespace cdm\SiteBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use cdm\SiteBundle\Entity\Module;
/**
* Article
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="cdm\SiteBundle\Entity\ArticleRepository")
*/
class Article extends Module
{
/**
* @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 string
*
* @ORM\Column(name="name", type="string", length=255)
*/
private $name;
/**
* @var string
*
* @ORM\Column(name="author", type="string", length=255)
*/
private $author;
/**
* @var \DateTime
*
* @ORM\Column(name="createDate", type="date")
*/
private $createDate;
/**
* @var \DateTime
*
* @ORM\Column(name="lastUpdateDate", type="date")
*/
private $lastUpdateDate;
/**
* @var string
*
* @ORM\Column(name="description", type="text", nullable=true)
*/
private $description;
/**
* @var string
*
* @ORM\Column(name="content", type="text", nullable=true)
*/
private $content;
public function __construct()
{
$this->createDate = new \Datetime(); // Par défaut, la date de l'article est la date d'aujourd'hui
$this->lastUpdateDate = new \Datetime();
}
答案 0 :(得分:0)
不要使用直接属性名称,而是使用twig文件中的子项和其他属性的getter
{% if root.getChildren.count > 0 %}
{% for item in root.getChildren %}
{% if item.getChildren.count() > 0 %}
<li class="dropdown"><a href="{{ path('cdm_site_article_id', { 'id': item.getId }) }}" class="dropdown-toggle" data-toggle="dropdown">{{ item.getName }}</a>
{{ include('cdmSiteBundle:Component:menu.html.twig', {'root': item, 'cssClass':"dropdown-menu"}) }} </li>
{% else %}
<li><a href="{{ path('cdm_site_article_name', { 'name': item.getName }) }}">{{ item.getName }}</a></li>
{% endif %}
{% endfor %}
{% endif %}
答案 1 :(得分:0)
问题在于buildMenuAction:
public function buildMenuAction()
{
$repository = $this->getDoctrine()
->getManager()
->getRepository('cdmSiteBundle:Module');
$root = $repository->findOneByName('root');
return $this->render('cdmSiteBundle:Component:menu.html.twig', array(
'root'=>$root,
'cssClass'=>"nav navbar-nav"
));
}
如果我想获得文章和类别,我必须得到基类。在我写这篇文章之前: - &gt; getRepository(&#39; cdmSiteBundle:Category&#39;)。
现在我需要包含一个界面并限制我的树只显示文章和类别。