CartoDB を Symfony2 プロジェクトに統合するためのバンドルを作成しました。このバンドルはエンティティ自体を作成しません。これは、データと cartodb データの間で情報を同期するために、独自のエンティティで永続化やフラッシュなどのイベントを「リッスン」するためです。ワークフローは次のとおりです。
エンティティ オブジェクトを作成します --> 永続化 --> イベントをリッスンします --> API を介して cartoDB にデータを追加します --> cartoDB オブジェクト ID を取得します --> 作成したオブジェクトで更新します
CartoDB バンドル アノテーションの例を次に示します。
/**
* @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 データとの同期をテストするために test フォルダーにエンティティを含め、それを test フォルダーに追加することにしました。次の手順に従いました。
- Doctrine バンドルをバンドル 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;
.....
?>
今度は、テスト スクリプトの番です。エンティティ名前空間を使用します。
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
何が欠けているのかわからない、誰か助けてくれる?