错误的Pomm地图文件路径

时间:2013-06-23 14:42:37

标签: postgresql symfony

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

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

这是我做的:

1 - PommBundle使用Composer安装到Symfony2.3.​​1中确定

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- 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-控制器中的问题

在COntroller中,我输入了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

我非常感谢任何帮助。感谢。

1 个答案:

答案 0 :(得分:1)

问题在于命名空间。

Symfony尝试调用应位于MyDatabase\PublicSchema\ProductMap文件中的课程MyDatabase/PublicSchema/ProductMap.php,而您的文件位于Database/PublicSchema/ProductMap.php

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