2016-02-10 57 views
2

嘿所有我想要呈現一根樹枝模板在我的控制器,而是我得到這個錯誤:Symfony2的枝杈渲染錯誤

Error: Call to a member function has() on a non-object 

我跟着幾所示例上線,並根據這些我要細,很遺憾我想我做錯了什麼。

我的控制器代碼:

<?php 

namespace Tomazi\SiteBundle\Controller; 

use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Tomazi\SiteBundle\Factories\FactoryHomePage; 

class IndexController extends Controller 
{ 
    public $home; 

    public function __construct(
     FactoryHomePage $home 
    ){ 
     $this->home = $home; 
    } 

    public function indexPageAction() 
    { 
     return $this->render('pages/home.html.twig', [ 
      'name' => 'Tomazi' 
     ]); 
    } 
} 

所以我的樹枝文件src的應用程序/資源/在這個文件視圖/ home.html.twig

我:

<h1>Hey {{ name }} </h1> 

爲什麼我得到這個錯誤信息?

更新1 OK,所以我的控制器被宣佈爲一個服務,這並沒有讓我用樹枝容器我相信....

然後我回去,並配置了我的控制器只是一個像這樣的控制器:

<?php 
namespace Tomazi\SiteBundle\Controller; 

use Symfony\Bundle\FrameworkBundle\Controller\Controller; 

class IndexController extends Controller 
{ 
    public function indexPageAction() 
    { 
     return $this->render('pages/home.html.twig', array('name' => 'Tomazi')); 
    } 
} 

我當然也必須改變我的路由,所以它不期望一個服務,但只是一個控制器。

經過這些更改,我能夠呈現我的home.html.twig,但是這並不滿足我,因爲我真的希望我的控制器是一項服務,因爲我想將我的工廠注入到它中,以準備Controller to Respond的所有數據,我喜歡薄控制器的方法...

要真正實現我的目標,我不得不一個service_container參數添加到我的控制器服務,像這樣:

<!-- Controller --> 
<service id="tomazi.sitebundle.controller.index" 
     class="Tomazi\SiteBundle\Controller\IndexController"> 
    <argument type="service" id="tomazi.sitebundle.factory.index" /> 
    **<argument type="service" id="service_container" />** 
</service> 

現在我的控制器的最終版本是這樣的:

<?php 

namespace Tomazi\SiteBundle\Controller; 

use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Symfony\Component\DependencyInjection\ContainerInterface; 
use Tomazi\SiteBundle\Factories\FactoryHomePage; 

class IndexController extends Controller 
{ 
    public $home; 

    public $container; 

    public function __construct(
     FactoryHomePage $factoryHomePage, 
     ContainerInterface $containerInterface 
    ){ 
     $this->home = $factoryHomePage; 
     $this->container = $containerInterface; 
    } 

    public function indexPageAction() 
    { 
     return $this->render('pages/home.html.twig', array('name' => 'Tomazi')); 
    } 
} 

不確定這是否是最好的方法,但它對我有用。

+0

也許你可以用基本佈局顯示完整的模板代碼?它看起來像是這樣的地方:app.request.has('any_var')。但我們需要更多的細節來定義問題(可能是來自錯誤跟蹤的更多細節) – Dmitry

+0

那麼我甚至不擴展我的基本模板,而我的基本模板是Symfony生成的 – John

回答

0

你可以試試這段代碼嗎?

public function indexPageAction() 
{ 
    return $this->render('pages/home.html.twig', array(
     'name' => 'Tomazi' 
    )); 
} 
+0

我也嘗試了相同的結果。我也清除了我的緩存只是incase,但這個錯誤只是想離開 – John

+0

數組()和[]相同的東西,這是不相關的問題。 –

1

OMG爲什麼它不工作,因爲我的控制器是原因的服務.....:@,我改變了它使我的控制器是標準的一聲它的工作原理......但我想我的控制器是一個服務.....所以我怎麼能找到一個方法...?是可以創建Twig容器作爲服務並將其注入到我的Controller服務中?

+0

只需在您的控制器服務定義中調用setContainer:調用:[[setContainer,['@ service_container']]]。順便說一句,最好用這種事情來更新你的問題,而不是提供另一個問題的答案。Stackoverflow與你的平均論壇有點不同。 – Cerad

+0

好吧,對不起,讓我解決這一切。 – John

+0

完成希望它現在看起來更好:) thx的建議,你怎麼看我的最終溶劑@Cerad – John