2013-06-23 16 views
0

Я создаю сайт с Symfony2 и PostgreSQL (в первый раз). Недавно я обнаружил слой базы данных Pomm, я решил использовать его вместо Doctrine2.Неверный путь к файлу карты Pomm

Однако, когда я пытаюсь отобразить некоторые данные, я получаю исключение смертельной ошибки. Проблема может возникнуть из-за неправильного пути к сгенерированному файлу карты Pomm. К сожалению, я не нашел никакой помощи в Руководстве и учебниках, которые я прочитал, чтобы исправить мою ошибку.

Вот что я сделал:

1-PommBundle Установка в Symfony2.3.1 с Composer = ок

2- Setup (PommBundle регистрация в прикладном ядра + настройки базы данных) = ок

3- Карта генерации файлов для таблицы БД 'продукта' (как изложено ниже) = ок

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

PommBundle Документация о autoload.php немного сбивает с толку (для англоязычного говорящего). В самом деле, вот что написано:

If you are using Symfony 2.0.x, you may still be using sf2 autoloader. Update your app/autoload.php file.

Однако я использую Symfony 2.3.1, поэтому я думал, что не нужно обновить файл приложения/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 документация говорит:

Update your app/autoload.php file [by adding the following code]:

$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 

Я был бы очень признателен за любую помощь. Благодарю.

ответ

1

Проблема в пространстве имен.

Symfony пытается вызвать класс MyDatabase\PublicSchema\ProductMap, который должен быть расположен в MyDatabase/PublicSchema/ProductMap.php файле, тогда как файл находится в Database/PublicSchema/ProductMap.php

Таким образом, вы должны переименовать папку Database в MyDatabase Ot имя базы данных для Database.

+0

То, что вы написали, правда, но в сообщении об ошибке была опечатка. На самом деле мое имя базы данных не является базой данных или MyDatabase, я просто переименовал ее, чтобы сделать мой вопрос более ясным (видимо, я потерпел неудачу, ха-ха). Извините, что вы смутили вас, я только что отредактировал ошибку сообщения. Таким образом, нет никаких проблем с именем базы данных. –

+0

@Jules вы обновили autoload.php, как это было сделано в документах? https://github.com/chanmix51/PommBundle#download-the-files – Hast

+0

Hast: Еще раз спасибо за вашу помощь. Нет, я не обновлял autoload.php, я собираюсь изменить свой вопрос и объяснить, почему. –