我们已经创建了一个捆绑包,用于在Symfony2项目中集成CartoDB。此捆绑包本身不会创建任何实体,因为它“监听”您自己的实体上的持久或刷新等事件,以同步数据和cartodb数据之间的信息。这是工作流程:
创建实体对象 - >坚持 - >听事件 - >通过他们的API将数据添加到cartoDB - >获取cartoDB对象ID - >在您创建的对象中更新它
以下是CartoDB Bundle anotations的示例:
/**
* @ORM\Entity
* @ORM\Table(name="testDB", options={"collate"="utf8_general_ci"})
* @CartoDB\CartoDBLink(connection="private", table="testDB", cascade={"persist", "remove"})
*/
class TestDB
{
/**
* @ORM\Column(name="cartodb_index", type="integer", nullable=true)
* @CartoDB\CartoDBColumn(column="testdb_id", index=true)
*/
protected $cartodbId;
我们想创建涵盖代码任何部分的测试,因此我们决定在测试文件夹中包含一个实体以测试与cartoDB数据的同步,并将其添加到测试文件夹中,我们已按照以下步骤操作:
1-将Doctrine Bundle添加到我们的bundle composer.json
2-在此路由中创建实体类:
Company/Tests/CartoDB/Entity/TestDB.php
此实体如下所示:
namespace Company\CartoDBBundle\Tests\CartoDB\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="testDB", options={"collate"="utf8_general_ci"})
* @CartoDB\CartoDBLink(connection="private", table="testDB", cascade={"persist", "remove"})
*/
class TestDB
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
.....
?>
3。现在转向测试脚本。我们使用实体命名空间:
use Company\CartoDBBundle\Tests\CartoDB\Entity\TestDB;
接下来,我们创建一个实体对象:
$test = new TestDB();
$test->setText("HI");
它运行正常,我们调用对象方法,一切顺利,最后一遍:
$em->persist($test);
$em->flush();
Doctrine \ Common \ Persistence \ Mapping \ MappingException:在链配置的命名空间中找不到类'Company \ CartoDBBundle \ Tests \ CartoDB \ Entity \ TestDB'
这是我们的学说配置:
doctrine:
dbal:
driver: pdo_sqlite
path: "%kernel.root_dir%/sqlite.db"
charset: UTF8
orm:
auto_generate_proxy_classes: %kernel.debug%
auto_mapping: true
不知道我们遗失了什么,有人可以帮助我们吗? 谢谢!
答案 0 :(得分:0)
基本问题是默认情况下,Doctrine只查找Bundle / Entity目录。因此,您需要在orm下更多信息:在配置文件中。
本手册有更多详情:http://symfony.com/doc/current/reference/configuration/doctrine.html
doctrine:
orm:
auto_generate_proxy_classes: %kernel.debug%
auto_mapping: false
mappings:
name:
type: php
dir: %kernel.root_dir%/../src/Company/CartoDBBundle/Tests/CartoDB/Entity
# alias: MyModels
# prefix: MyBundle\OtherNamespacePart\Entity
# is_bundle: true
您可能需要也可能不需要使用别名和前缀。如果配置正确,则运行:
app/console doctrine:schema:update --dump-sql
将转储表信息。