2015-08-28 3 views
0

У меня есть простая установка symfony 2 с Doctrine ORM и db с некоторыми именами выделенных полей подчёркивания (например, «error_page»). Запрашивание это не дает результата (GetTitle действительно дает результат, getErrorPage всегда пустой) и Symfony дает мне ошибку:Symfony 2 Doctrine ODM возвращающие ошибки в существующих полях

Method "error_page" for object "My\CmsBundle\Document\Website" does not exist in MyCmsBundle:Default:dashboard.html.twig at line 5 

Я не могу понять, почему ... Мой документ выглядит следующим образом:

<?php 

// src/My/CmsBundle/Document/Website.php 
namespace My\CmsBundle\Document; 

use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB; 

/** 
* @MongoDB\Document(
*  collection="websites" 
*) 
*/ 
class Website 
{ 
    /** 
    * @MongoDB\Id 
    */ 
    protected $id; 

    /** 
    * @MongoDB\String 
    */ 
    protected $slug; 

    /** 
    * @MongoDB\Field(type="string", name="error_page") 
    */ 
    protected $error_page = ""; 


    /** 
    * @MongoDB\String 
    */ 
    protected $title; 


    /** 
    * @MongoDB\String(name="seo_title") 
    */ 
    protected $seo_title; 

    /** 
    * @MongoDB\String 
    */ 
    protected $seo_description; 




    /** 
    * @MongoDB\Collection 
    */ 
    protected $url = array(); 

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

    /** 
    * Set slug 
    * 
    * @param string $slug 
    * @return self 
    */ 
    public function setSlug($slug) 
    { 
     $this->slug = $slug; 
     return $this; 
    } 

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

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

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

    /** 
    * Set errorPage 
    * 
    * @param string $errorPage 
    * @return self 
    */ 
    public function setErrorPage($errorPage) 
    { 
     $this->error_page = $errorPage; 
     return $this; 
    } 

    /** 
    * Get errorPage 
    * 
    * @return string $errorPage 
    */ 
    public function getErrorPage() 
    { 
     return $this->error_page; 
    } 

    /** 
    * Set url 
    * 
    * @param collection $url 
    * @return self 
    */ 
    public function setUrl($url) 
    { 
     $this->url = $url; 
     return $this; 
    } 

    /** 
    * Get url 
    * 
    * @return collection $url 
    */ 
    public function getUrl() 
    { 
     return $this->url; 
    } 

    /** 
    * Set seoTitle 
    * 
    * @param string $seoTitle 
    * @return self 
    */ 
    public function setSeoTitle($seoTitle) 
    { 
     $this->seo_title = $seoTitle; 
     return $this; 
    } 

    /** 
    * Get seoTitle 
    * 
    * @return string $seoTitle 
    */ 
    public function getSeoTitle() 
    { 
     return $this->seo_title; 
    } 

    /** 
    * Set seoDescription 
    * 
    * @param string $seoDescription 
    * @return self 
    */ 
    public function setSeoDescription($seoDescription) 
    { 
     $this->seo_description = $seoDescription; 
     return $this; 
    } 

    /** 
    * Get seoDescription 
    * 
    * @return string $seoDescription 
    */ 
    public function getSeoDescription() 
    { 
     return $this->seo_description; 
    } 
} 

Создание документа через этот документ отлично работает. Имя поля также устанавливается на страницу error_page, как ожидалось ... Я в растерянности здесь: S

+1

Используйте camelCase в Twig: '{{document.errorPage}}' – malcolm

ответ

1

Собственно, Doctrine + Symfony2 полагает, что имя для верблюда имеет переменное имя. Twig с использованием имени метода getter должен быть очевиден, как он должен обращаться к защищенным/закрытым переменным? Ему нужно имя для чего-то публичного: геттер. Возможно, вам интересно, почему «get» игнорируется; это упрощение для дизайнеров, поскольку они обычно не должны знать о том, что такое «геттеры», и о различии между методами и переменными.

так в вашем веточка файле, изменения:

{{document.error_page}} 

в

{{document.errorPage}} 

this будет полезным.

+0

Работает как шарм. Проблема с данными, не отображаемыми в контроллере, была связана с тем, что кеширование было слишком суровым ... Спасибо! –

+0

добро пожаловать! –

Смежные вопросы