首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Symfony2表单- setParameter声明变量是未定义的

Symfony2表单- setParameter声明变量是未定义的
EN

Stack Overflow用户
提问于 2014-03-05 15:50:51
回答 2查看 696关注 0票数 0

我在我的symfony2项目中有一个表单,在其中我要向构建器添加一个新的表单元素:

代码语言:javascript
复制
$builder->add('section', 'entity', array(
            'class' => 'SciForumVersion2Bundle:Section',
            'label' => 'Section',
            'property' => 'name',
            'query_builder' => function(EntityRepository $er) {
                return $er->createQueryBuilder('s')
                ->where('s.conference = conference')
                ->setParameter('conference', $conference);
            },
    ));

$conference变量来自控制器,我在FormType中设置这个变量:

代码语言:javascript
复制
private $conference;

public function __construct($conference)
{
    $this->conferenceObject = $conference;
}

但是,我得到了错误消息:

代码语言:javascript
复制
ContextErrorException: Notice: Undefined variable: conference in ....

行号指向这条线:

代码语言:javascript
复制
->setParameter('conference', $conference);

在使用时

代码语言:javascript
复制
'query_builder' => function(EntityRepository $er) {
        return $er->createQueryBuilder('s')
        ->where('s.conference = :conference')
        ->setParameter('conference', $this->conference);
    },

我收到以下错误消息:

代码语言:javascript
复制
FatalErrorException: Error: Using $this when not in object context in..

有什么想法吗?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-05 15:59:30

在FormType __construct()中,要设置的类变量名中有一个错误:

代码语言:javascript
复制
public function __construct($conference)
{
    $this->conference = $conference;
}

query_builder参数中,使用类变量作为值,并在DQL部分中使用前缀参数名称“:”:

代码语言:javascript
复制
$conference = $this->conference;
$builder->add('section', 'entity', array(
        'class' => 'SciForumVersion2Bundle:Section',
        'label' => 'Section',
        'property' => 'name',
        'query_builder' => function(EntityRepository $er) use ($conference) {
            return $er->createQueryBuilder('s')
            ->where('s.conference = :conference')
            ->setParameter('conference', $conference);
        },
));
票数 2
EN

Stack Overflow用户

发布于 2014-03-05 15:53:35

这条线正在产生误差。

代码语言:javascript
复制
->where('s.conference = $conference')

我会是那样的

代码语言:javascript
复制
->where('s.conference = conference')
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22202543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档