2016-02-06 42 views
0

我試圖使用Symfony 2 Framework實現一個Internet應用程序。我創建了實體類,我在控制器中實例化了哪個類,並用數據填充了該類的變量 - 它工作正常,但是當我嘗試將數據發送到數據庫時 - 失敗(由於某些原因,持久方法失敗 - 其中我知道是因爲我將持久方法放在try-catch()代碼塊中)。Symfony 2 - 在鏈配置的命名空間中找不到實體類

在我收到如下的informaction Web瀏覽器:

string 'The class 'AppBundle\Entity\Practice_Words' was not found in the 
chain configured namespaces ' (length=93) 

控制器的代碼:

<?php 

    namespace AppBundle\Controller; 

    use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 
    use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
    use Symfony\Component\HttpFoundation\Request; 
    use AppBundle\Entity\Practice_Words; 

    class DefaultController extends Controller 
    { 
    /** 
    * @Route("/", name="homepage") 
    */ 


    public function indexAction() 
    { 

    $practiceWords = new Practice_Words(); 
    $practiceWords->setEnglishWord("kind"); 
    $practiceWords->setPolishWord("rodzaj"); 

    $em = $this->getDoctrine()->getManager(); 

    try{ 
    $em->persist($practiceWords); 
    $em->flush(); 
    }catch(\Exception $e) { 
     var_dump($e->getMessage()); 
    } 

    return $this->render('AppBundle:Default:index.html.twig'); 
    } 
} 

實體 - Practice_Words:

config.yml的
<?php 

    namespace AppBundle\Entity; 

/** 
    * Practice_Words 
    */ 
class Practice_Words 
{ 
/** 
    * @var int 
    */ 
    private $id; 

/** 
    * @var string 
    */ 
    private $englishWord; 

/** 
* @var string 
*/ 
    private $polishWord; 

/** 
* Get id 
* 
* @return int 
*/ 
public function getId() 
{ 
    return $this->id; 
} 

/** 
* Set englishWord 
* 
* @param string $englishWord 
* 
* @return Practice_Words 
*/ 

public function setEnglishWord($englishWord) 
{ 
    $this->englishWord = $englishWord; 

    return $this; 
} 

/** 
* Get englishWord 
* 
* @return string 
*/ 
public function getEnglishWord() 
{ 
    return $this->englishWord; 
} 

/** 
* Set polishWord 
* 
* @param string $polishWord 
* 
* @return Practice_Words 
*/ 
public function setPolishWord($polishWord) 
{ 
    $this->polishWord = $polishWord; 

    return $this; 
} 

/** 
* Get polishWord 
* 
* @return string 
*/ 
public function getPolishWord() 
{ 
    return $this->polishWord; 
} 

代碼

imports: 
- { resource: parameters.yml } 
- { resource: security.yml } 
- { resource: services.yml } 

# Put parameters here that don't need to change on each machine where  
    the app is deployed 

# http://symfony.com/doc/current/best_practices 
    /configuration.html#application-related-configuration 
parameters: 
locale: en 

framework: 
#esi:    ~ 
#translator:  { fallbacks: ["%locale%"] } 
secret:   "%secret%" 
router: 
    resource: "%kernel.root_dir%/config/routing.yml" 
    strict_requirements: ~ 
form:   ~ 
csrf_protection: ~ 
validation:  { enable_annotations: true } 
#serializer:  { enable_annotations: true } 
templating: 
    engines: ['twig'] 
    #assets_version: SomeVersionScheme 
default_locale: "%locale%" 
trusted_hosts: ~ 
trusted_proxies: ~ 
session: 
    # http://symfony.com/doc/current/reference/configuration/framework.html#handler-id 
    handler_id: session.handler.native_file 
    save_path: "%kernel.root_dir%/../var/sessions/%kernel.environment%" 
fragments:  ~ 
http_method_override: true 
assets: ~ 

# Twig Configuration 
twig: 
debug:   "%kernel.debug%" 
strict_variables: "%kernel.debug%" 



# Doctrine Configuration 
doctrine: 
    dbal: 
    driver: pdo_mysql 
    host:  "%database_host%" 
    port:  "%database_port%" 
    dbname: "%database_name%" 
    user:  "%database_user%" 
    password: "%database_password%" 
    charset: UTF8 
    # if using pdo_sqlite as your database driver: 
    # 1. add the path in parameters.yml 
    #  e.g. database_path: "%kernel.root_dir%/data/data.db3" 
    # 2. Uncomment database_path in parameters.yml.dist 
    # 3. Uncomment next line: 
    #  path:  "%database_path%" 

    orm: 
    auto_generate_proxy_classes: "%kernel.debug%" 
    naming_strategy: doctrine.orm.naming_strategy.underscore 
    auto_mapping: true 

    # Swiftmailer Configuration 
    swiftmailer: 
    transport: "%mailer_transport%" 
    host:  "%mailer_host%" 
username: "%mailer_user%" 
password: "%mailer_password%" 
spool:  { type: memory } 

請問我指出我做錯了什麼?謝謝。

+0

你可以發佈實體的學說映射嗎?也許你忘記了? – gvf

+0

gvf你是指實體類中的getters和setter的yml頭文件嗎? – Bartosz

+0

不,我的意思是這樣的:http://symfony.com/doc/current/book/doctrine.html#add-mapping-information – gvf

回答

0

我認爲問題可能出在您的班級命名上。 根據PSR-4類名必須寫在CamelCase中。對於你的課程 'AppBundle \ Entity \ Practice_Words'=>'AppBundle \ Entity \ Practice \ Words.php' 嘗試重命名你的類並檢查你的數據庫表名。

+0

Ozz Mium as yuu建議我先將班級重新命名爲PracticeWords--它不起作用,之後我再次將班級重新命名爲練習詞 - 這也沒用。我甚至試圖在'使用'中使用反斜槓 - 使用\ AppBundle \ Entity \ .. \,並且在類名中是一個下劃線時,我將反斜槓放在下劃線的位置,而不是下劃線沒有工作。我試着在indexMain中創建對象,像practiceWords = new \ practiceWords(); - 我一直都有同樣的錯誤。 – Bartosz

+0

當您更改爲'PraticeWords'時,是否記得修改'config.yml'以刪除'naming_strategy:doctrine.orm.naming_strategy.underscore'行? –

+0

Jason Roman是的,我刪除了這行:naming_strategy:config.yml中的doctrine.orm.naming_strategy.underscore,清除了現金,並且仍然有相同的錯誤。 – Bartosz

相關問題