疑难解答“[语法错误]预期的PlainValue,得到')'”

时间:2011-06-14 01:30:29

标签: annotations doctrine-orm

我在Doctrine 2的注释文档块中收到此错误:

Doctrine\Common\Annotations\AnnotationException: [Syntax Error] Expected PlainValue, got ')'

在寻找答案之后,我发现了这个引用Stackoverflow Question 3500125,其实质上是指在注释中的所有值周围加上引号。

使用注释块我似乎不可能。这是我抛出错误的例子。

/**
 * @var tags
 *
 * @ManyToMany(targetEntity="namespace\to\tag")
 * @JoinTable(name="content_tag",
 *   joinColumns={
 *     @JoinColumn(name="content_id", referencedColumnName="id")
 *   },
 *   inverseJoinColumns={
 *     @JoinColumn(name="tag_id", referencedColumnName="id")
 *   }
 * ) // This is the line indicated by the error
 */
private $tags;

如果我按照我在堆栈溢出中找到的答案的建议来引用这些值,我的代码将是这样的:

/**
 * @var tags
 *
 * @ManyToMany(targetEntity="namespace\to\tag")
 * @JoinTable(name="content_tag",
 *   joinColumns="{
 *     @JoinColumn(name="content_id", referencedColumnName="id")
 *   }",
 *   inverseJoinColumns="{
 *     @JoinColumn(name="tag_id", referencedColumnName="id")
 *   }" // Note the extra quotation marks
 * )
 */
private $tags;

这根本不对。

3 个答案:

答案 0 :(得分:11)

对于那些来到这里但不是因为学说的人,我的错误是在@Routes注释中使用单引号而不是双引号。

WRONG:

/**
* @Route('/home')
*/

RIGHT

/**
* @Route("/home")
*/

答案 1 :(得分:2)

这是一个愚蠢的错误,错误字符串不是很有用,因为它指向我在我的问题中显示的行作为错误所在的行。事实是这个实体正在扩展一个父对象,父对象有@Entity标签,但是孩子没有,我移动了它,一切正常。

答案 2 :(得分:0)

我只是通过对实体使用断言而发生相同类型的错误:

     * @Assert\Email(
     *     message = "The email '{{ value }}' is not a valid email.",
     *     mode = 'strict',
     *     normalizer = 'trim'
     * )

将其转换为

     * @Assert\Email(
     *     message = "The email '{{ value }}' is not a valid email.",
     *     mode = "strict",
     *     normalizer = "trim"
     * )

解决了:)