键“0”的数组的键“getPageTitle”不存在

时间:2013-10-18 15:46:39

标签: symfony doctrine

我收到此错误

  

键中包含“0”的数组的“getPageTitle”不存在   DprocMainBundle:第2行的Dproc:single.html.twig

第2行:{{ page.getPageTitle }}

我的实体档案

<?php
namespace Dproc\MainBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @IgnoreAnnotation("fn")
 *
 */
/**
 * @ORM\Entity
 * @ORM\Table(name="pages")
 */
class Pages
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $Id;

    /**
    * @ORM\Column(name="page_title", type="text")
    */
    protected $pageTitle;

    /**
 * @ORM\Column(name="page_content", type="text")
 */
    protected $pageContent;

    /**
    * @ORM\Column(name="page_category", type="text")
    */
    protected $pageCategory;

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

    /**
     * Set page_title
     *
     * @param string $pageTitle
     * @return Pages
     */
    public function setPageTitle($pageTitle)
    {
        $this->pageTitle = $pageTitle;

        return $this;
    }

    /**
     * Get page_title
     *
     * @return string 
     */
    public function getPageTitle()
    {
        return $this->pageTitle;
    }

    /**
     * Set page_content
     *
     * @param string $pageContent
     * @return Pages
     */
    public function setPageContent($pageContent)
    {
        $this->pageContent = $pageContent;

        return $this;
    }

    /**
     * Get page_content
     *
     * @return string 
     */
    public function getPageContent()
    {
        return $this->pageContent;
    }

    /**
     * Set page_category
     *
     * @param string $pageCategory
     * @return Pages
     */
    public function setPageCategory($pageCategory)
    {
        $this->pageCategory = $pageCategory;

        return $this;
    }

    /**
     * Get page_category
     *
     * @return string 
     */
    public function getPageCategory()
    {
        return $this->pageCategory;
    }
}

控制器

public function IndexAction($slug)
    {
        $page = $this->getDoctrine()
           ->getRepository('DprocMainBundle:Pages')
           ->findByPageTitle($slug);

        if (!$page) {
           throw $this->createNotFoundException('No product found for slug '.$slug);
        }
        //print_r($page);
        return $this->render('DprocMainBundle:Dproc:single.html.twig',array('page' => $page));
    }

我做错了什么,我怎么称呼我的getter方法getPageTitle?

由于

5 个答案:

答案 0 :(得分:14)

错误源于你的学说。如果你改变了

$page = $this->getDoctrine()
       ->getRepository('DprocMainBundle:Pages')
       ->findByPageTitle($slug);

为:

$page = $this->getDoctrine()
       ->getRepository('DprocMainBundle:Pages')
       ->findOneByPageTitle($slug);

你应该全力以赴。问题是'page'是一个页面数组(可能是一个只有一个页面的数组,但仍然是一个数组)。通过将方法更改为findOneByX,您可以确保Doctrine将返回单个对象,而不是对象数组。希望有所帮助。

答案 1 :(得分:1)

您的结果是一个数组,因为findByPageTitle($slug)将返回所有匹配的数组,即使只有一个匹配。取而代之的是findOneBy(array('pageTitle'=>$slug)),您将得到一个结果。您当前的设置可能会{{ page.0.getPageTitle }}起作用。

答案 2 :(得分:0)

如果您打算使用getter函数,则需要执行以下操作:

{{page.getPageTitle()}}

注意括号。如果你想要twig自动使用getter函数你可以做

{{page.pageTitle}}

答案 3 :(得分:0)

你试过{{page.pageTitle|default('')}}吗?它对我有用!

答案 4 :(得分:0)

很简单:getResult()返回一个对象数组,即使只有一个。如果您希望此查询只返回一个对象,请使用getOneOrNullResult()