2014-09-19 4 views
6

मैं autoloader के रूप में संगीतकार के autoloading साथ troube है समाधान नहीं कर सकता सिद्धांत \ ORM \ मानचित्रण \ टेबल। Unittests मैं ठेठ एनोटेशन के साथ सिद्धांत की इकाई वर्गों बनाया है के लिए:विक्रेता निर्देशिका में autoloader.php का उपयोग कर सही काम नहीं कर रहा autloading

<?php 

namespace OmniSearchTest\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* Picture 
* 
* @ORM\Table(name="picture") 
* @ORM\Entity 
*/ 
class Picture 
{ 

और इस संस्थाओं का उपयोग करके एक नई इकाई प्रबंधक बनाया। लेकिन im संदेश हो रही है:

Doctrine\Common\Annotations\AnnotationException: [Semantical Error] The annotation "@Doctrine\ORM\Mapping\Table" in class OmniSearchTest\Entity\Picture does not exist, or could not be auto-loaded. 

कुछ Unittests लिए

सबसे पहले, मैं निम्नलिखित परियोजना संरचना:

/src 
    /OmniSearch 
     SomeClass.php 
/tests 
    /OmniSearchTest 
     SomeClassTest.php 
/composer.json 
/phpunit.xml.dist 

मेरे composer.json इस तरह दिखता है:

{ 
    /* ... */ 

    "require": { 
     "php": ">=5.4", 
     "doctrine/orm": "2.*" 
    }, 
    "require-dev": { 
     "phpunit/phpunit": "4.*" 
    }, 
    "autoload": { 
     "psr-0": { 
      "OmniSearch\\": "src/" 
     } 
    }, 
    "autoload-dev": { 
     "psr-0": { 
      "OmniSearchTest\\": "tests/" 
     } 
    } 
} 

जबकि मेरा phpunit इस तरह उत्कृष्ट दिखता है:

<?xml version="1.0" encoding="UTF-8"?> 
<phpunit backupGlobals="false" 
    backupStaticAttributes="false" 
    bootstrap="vendor/autoload.php" 
    strict="true" 
    verbose="true"> 
    <testsuites> 
     <testsuite name="omnisearch"> 
      <directory>./tests/OmniSearchTest</directory> 
     </testsuite> 
    </testsuites> 
</phpunit> 

मैं मेरा एक और zf2 परियोजना जहां autoloading ठीक काम कर रहा था से इस परियोजना बंद cutted। इम यकीन नहीं वास्तव में क्या गलत हो गया था क्योंकि स्वत: जनरेट की autoload_namespaces.php मानचित्रण शामिल हैं:

'Doctrine\\ORM\\' => array($vendorDir . '/doctrine/orm/lib'), 

उत्तर

13

यह अंधेरा लेकिन Symfony 2 अनुप्रयोगों में एक शॉट की तरह है एक autoload.php फ़ाइल जो स्पष्ट रूप से एक एनोटेशन रजिस्ट्री लोड करता है शामिल ।

// autoload.php 
use Doctrine\Common\Annotations\AnnotationRegistry; 
use Composer\Autoload\ClassLoader; 

/** 
* @var ClassLoader $loader 
*/ 
$loader = require __DIR__.'/../vendor/autoload.php'; 

AnnotationRegistry::registerLoader(array($loader, 'loadClass')); 

return $loader; 

मैंने वास्तव में कभी भी शोध नहीं किया क्योंकि मैं एनोटेशन का उपयोग क्यों नहीं करता हूं। लेकिन इसे आज़माएं। चोट नहीं पहुंचा सकता

+0

whohaaaa, तो आप सही ... मैं परीक्षण निर्देशिका में bootstrap.php बनाए जाने की है और इस फाइल को – torsten

+1

bootstrap करने के लिए phpunit.xml संशोधित और मैं बस से संगीतकार के autoload.php का उपयोग ' विक्रेता की निर्देशिका और यह काम किया (मैं bootstrap.php का भी उपयोग नहीं करता): '$ loader = requ_once __DIR __। '/ विक्रेता/autoload.php'; एनोटेशन रजिस्ट्री :: रजिस्टर लोडर (सरणी ($ लोडर, 'लोड क्लास')); ' –

3

इसमें कुछ समय पुरानी है, लेकिन मुझे लगता है जो एक लोडर के रूप में AnnotationRegistry में संगीतकार classloader पंजीकृत करता है एक संगीतकार प्लगइन बनाया।

https://github.com/indigophp/doctrine-annotation-autoload

संबंधित मुद्दे