我正在使用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
我非常感谢任何帮助。感谢。
答案 0 :(得分:1)
问题在于命名空间。
Symfony尝试调用应位于MyDatabase\PublicSchema\ProductMap
文件中的课程MyDatabase/PublicSchema/ProductMap.php
,而您的文件位于Database/PublicSchema/ProductMap.php
因此,您应该将Database
文件夹重命名为MyDatabase
数据库名称为Database
。