我正在用 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
我将非常感谢任何帮助。谢谢。