0

我正在用 Symfony2 和 PostgreSQL(第一次)建立一个网站。我最近发现了名为Pomm的数据库层,我决定使用它而不是 Doctrine2。

但是,当我尝试显示一些数据时出现致命错误异常。问题可能来自生成的 Pomm 映射文件的错误路径。不幸的是,我在手册和阅读的教程中没有找到任何帮助来解决我的错误。

这是我所做的:

1- PommBundle使用 Composer 安装到 Symfony2.3.​​1 = ok

2-设置(应用程序内核中的 PommBundle 注册 + 数据库设置)= ok

3-为 db 表 'product' 生成映射文件(如下) = ok

app/console pomm:mapfile:create product

Pomm 生成了文件夹“数据库”,现在网站结构为:

-- Source Files
 |-- Database
   |-- PublicSchema
     |-- Base
            ProductMap.php
         Product.php
         ProductMap.php
 |-- app
 |-- bin
 |-- src
 |-- vendor
 |-- web

4-应用程序/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

1

问题在于命名空间。

Symfony 试图调用MyDatabase\PublicSchema\ProductMap应该位于MyDatabase/PublicSchema/ProductMap.php文件中的类,而您的文件位于Database/PublicSchema/ProductMap.php

因此,您应该将Database文件夹重命名为MyDatabaseot 数据库名称为Database.

于 2013-06-23T14:57:42.490 回答