Symfony2 と PostgreSQL を使用して (初めて) Web サイトを構築しています。最近、 Pommというデータベース層を発見したので、Doctrine2 の代わりにそれを使用することにしました。
ただし、一部のデータを表示しようとすると、Fatal Error Exception が発生します。この問題は、生成された Pomm マップ ファイルへの間違ったパスが原因である可能性があります。残念ながら、間違いを修正するために読んだマニュアルやチュートリアルには何の助けも見つかりませんでした。
これが私がしたことです:
1- Composer = ok を使用した Symfony2.3.1 への PommBundle のインストール
2-セットアップ (アプリケーション カーネルでの PommBundle 登録 + データベース設定) = ok
3- db テーブル 'product' のマップ ファイルの生成 (次のように) = ok
app/console pomm:mapfile:create product
Pomm は「データベース」フォルダーを生成し、現在の Web サイト構造は次のとおりです。
-- Source Files
|-- Database
|-- PublicSchema
|-- Base
ProductMap.php
Product.php
ProductMap.php
|-- app
|-- bin
|-- src
|-- vendor
|-- web
4- app/autoload.php
autoload.php に関する PommBundle ドキュメントは、(英語を母国語としない人にとって) 少しわかりにくいものです。確かに、次のように書かれています。
Symfony 2.0.x を使用している場合、まだ sf2 オートローダーを使用している可能性があります。app/autoload.php ファイルを更新します。
ただし、私は Symfony 2.3.1 を使用しているため、app/autoload.php ファイルを更新する必要はないと考えました。
さらに、ファイルに何を追加する必要があるかは明確ではありません。
# app/autoload.php (original file)
use Doctrine\Common\Annotations\AnnotationRegistry;
use Composer\Autoload\ClassLoader;
$loader = require __DIR__.'/../vendor/autoload.php';
AnnotationRegistry::registerLoader(array($loader, 'loadClass'));
return $loader;
PommBundle のドキュメントには次のように書かれています。
[次のコードを追加して] app/autoload.php ファイルを更新します。
$loader->registerNamespaces(array(
'Symfony' => array(__DIR__.'/../vendor/symfony/src', __DIR__.'/../vendor/bundles'),
...
'Pomm' => __DIR__.'/../vendor/pomm/pomm',
'Pomm\\PommBundle' => __DIR__.'/../vendor/pomm/pomm-bundle',
このコードをファイルに追加する方法がわかりませんでした (上記を参照)。だから、これは Symfony 2.0.* だけのものだと思いました。
5-コントローラーの問題
コントローラで、Pomm マップ ファイルへのパスを次のように入力しました。
namespace Admin\ProductBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
class DefaultController extends Controller
{
public function indexAction()
{
$myproducts = $this->get('pomm')
->getDatabase('database')
->createConnection()
->getMapFor('Database\PublicSchema\Product')
->findAll();
return $this->render('AdminProductBundle:Default:index.html.twig',
array("myproducts" => $myproducts));
}
}
このエラーが発生するため、私は確かに何か間違ったことをしました:
FatalErrorException: Error: Class 'Database\PublicSchema\ProductMap' not found in
/var/www/mywebsite/vendor/pomm/pomm/Pomm/Connection/Connection.php line 153
どんな助けにもとても感謝しています。ありがとう。