我们创建了一个包来将 CartoDB 集成到 Symfony2 项目中。此捆绑包本身不会创建任何实体,因为它会“侦听”您自己的实体上的持久或刷新等事件,以在您的数据和 cartodb 数据之间同步信息。这是工作流程:
创建一个实体对象-->持久化-->监听事件-->通过他们的API向cartoDB添加数据-->获取cartoDB对象ID-->在你创建的对象中更新它
这是 CartoDB Bundle 注释的示例:
/**
* @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;
我们想创建覆盖代码任何部分的测试,因此我们决定在 test 文件夹中包含一个实体来测试与 cartoDB 数据的同步,并将其添加到 test 文件夹中,我们遵循以下步骤:
- 将 Doctrine Bundle 添加到我们的包 composer.json。
- 在这个路由中创建一个实体类:
Company/Tests/CartoDB/Entity/TestDB.php
该实体如下所示:
<?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;
.....
?>
现在轮到测试脚本了。我们使用实体命名空间:
使用公司\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
不知道我们缺少什么,有人可以帮助我们吗?