";类XXX不是有效的实体或映射的超类“;使用php应用程序/控制台时出错


"Class XXX is not a valid entity or a mapped super class" error when using php app/console

我遵循Symfony2/Doctrine指南,已经到了需要创建getter/setter的部分。但我被这个部分卡住了:

$ php app/console doctrine:generate:entities Acme/StoreBundle/Entity/Job

我在网上搜索了可能的解决方案(似乎主要围绕着使用2个星号开始),但找不到解决方案。

一些信息:

  1. Bundle是正确加载的(通过AppKernel.php),因为我有一个测试"helloworld",这是有效的
  2. 命名空间路径正确
  3. Job.php存在于正确的文件夹中
  4. 我正在使用postgres作为我的数据库。我不确定这是否重要
  5. 我已经尝试过在模型类中使用和不使用Doctrine''ORM''Mapping行(代码见下文)
  6. 我不认为我在运行加速器,至少根据get_loaded_extensions函数任何想法都会很有帮助

非常感谢:)

我的settings.yml片段

doctrine:
    dbal:
        driver:   "%database_driver%"
        host:     "%database_host%"
        port:     "%database_port%"
        dbname:   "%database_name%"
        user:     "%database_user%"
        password: "%database_password%"
        charset:  UTF8
        # if using pdo_sqlite as your database driver, add the path in parameters.yml
        # e.g. database_path: "%kernel.root_dir%/data/data.db3"
        # path:     "%database_path%"
    orm:
        auto_generate_proxy_classes: "%kernel.debug%"
        auto_mapping: true

Model

<?php
// src/MyApp/MyBundle/Model/Job.php
namespace MyApp'MyBundle'Model;
use Doctrine'ORM'Mapping as ORM;
/**
 * MyApp'MyBundle'Model'Job
 *
 * @ORM'Entity
 * @ORM'Table(name="myschema.jobs")
 */
class Job {
    /**
     * @ORM'Column(name="job_id", type="integer")
     * @ORM'Id
     * @ORM'GeneratedValue(strategy="AUTO")
     */
    protected $jobid;
    /**
     * @ORM'Column(name="name", type="text")
     */
    protected $name;
    /**
     * @ORM'Column(name="job_desc", type="text")
     */
    protected $description;
    /**
     * @ORM'Column(name="personal_req", type="text")
     */
    protected $requirements;
}

您是否使用条令创建实体?我在你的Job.php实体上看到你正在使用注释作为映射格式。

在错误的输出中,它说条令找不到任何映射的实体。我去过那里,它通过您的config.yml.的特定配置解决了

尝试在您的config.yml 上更改此项

doctrine:
dbal:
    driver:   "%database_driver%"
    #etc
orm:
    auto_generate_proxy_classes: "%kernel.debug%"
    auto_mapping: false
    mappings:
        MyAppMyBundle:
            type: annotation #On your case it should be annotation
            dir: Resources/Model/

阅读这篇文章也许会有所帮助:

Symfony2中使用YAML 的条令映射

您尝试过使用以下控制台命令吗?

$ php app/console doctrine:generate:entities MyApp/MyBundle/Model

我希望它能起作用。您的实体命名空间与Acme/StoreBundle/Entity/Product不同。您的实体在Model directory/namespace中,所以您应该使用命令的第一个参数一个有效的namespace。所以下面的cmd会产生错误,正如您上面提到的那样。

$ php app/console doctrine:generate:entities Acme/StoreBundle/Entity/Product