2013-10-02 10 views
1

Я перехожу к руководству по началу работы в Доктрине и застрял в начале из-за «Class 'Product» не найден в /var/www/test/product-create.php в строке 6 " :Doctrine Entity «Class not found»

<?php 
require_once 'bootstrap.php'; 

$newProductName = $argv[1]; 

>>>>> $product = new Product(); 
$product->setName($newProductName); 

$entityManager->persist($product); 
$entityManager->flush(); 

echo sprintf('Created Product with ID %d' . PHP_EOL, $product->getId()); 

Как указано в руководстве, у меня есть класс продукта в каталоге «./src» в моем проекте.

Пожалуйста, помогите мне, потому что я хочу начать использовать Доктрину без Symfony, и я не могу двигаться дальше.

Вот мой bootstrap.php:

<?php 
use Doctrine\ORM\Tools\Setup; 
use Doctrine\ORM\EntityManager; 

use Symfony\Component\Yaml\Parser; 

require 'vendor/autoload.php'; 

$yaml = new Parser(); 

$parameters = $yaml->parse(file_get_contents(__DIR__ . '/parameters.yml')); 
$parameters = $parameters['parameters']; 

$config = Setup::createAnnotationMetadataConfiguration(array(__DIR__ . '/src'), $parameters['debug']); 

$conn = array 
    (
     'host'  => $parameters['database_host'], 
     'port'  => $parameters['database_port'], 
     'driver' => $parameters['database_driver'], 
     'user'  => $parameters['database_user'], 
     'password' => $parameters['database_password'], 
     'dbname' => $parameters['database_name'] 
    ); 

$entityManager = EntityManager::create($conn, $config); 

И это мой product.php:

<?php 
/** 
* @Entity 
* @Table (name="products") 
**/ 
class Product 
{ 
    /** 
    * @Id 
    * @Column(type="integer") @GeneratedValue 
    **/ 
    protected $id; 

    /** 
    * @Column(type="string") 
    **/ 
    protected $name; 

    public function getId() 
    { 
     return $this->id; 
    } 

    public function getName() 
    { 
     return $this->name; 
    } 

    public function setName($name) 
    { 
     $this->name = $name; 
    } 
} 

Спасибо всего заранее!

ответ

4

Я не вижу, где вы включаете класс продукта. Вы должны написать наверху своего файла.

require_once 'patch_to_your_class/Product.php';

или использовать автозагрузчик для классов.

+0

Серж, ты супер совершенен! Но я не понимаю, почему сторонники Doctrine не включили это в свою документацию? Спасибо за подсказку! –

2

Я просто наткнулся на ваш вопрос сейчас, и надеюсь, что вы нашли ответ, но, чтобы помочь другим, нужно, чтобы убедиться, что вы включили в вашем composer.json следующих

"autoload": { 
    "psr-0": {"": "src/"} 
} 

Или включить его вручную как @ Сергей Студеникин предложил