嘿所有我想在我的控制器中渲染一个树枝模板,但我得到这个错误:
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'
]);
}
}
所以我的twig文件src是app / Resources / view / home.html.twig
在这个文件中我有:
<h1>Hey {{ name }} </h1>
为什么我收到此错误消息?
更新1 好的,所以我的控制器被宣布为服务,这不允许我使用twig容器我相信....
然后我回去并将我的控制器配置为像这样的控制器:
<?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
,但这并不满足我,因为我真的希望我的控制器成为一项服务,因为我想将我的工厂注入其中,为控制器准备所有数据响应,我喜欢THIN控制器方法...
要实际实现我的目标,我必须向我的Controller服务添加一个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 :(得分:1)
答案 1 :(得分:0)
你可以尝试这段代码吗?
@Inject