0

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

どんな助けにもとても感謝しています。ありがとう。

4

1 に答える 1