2012-12-29 33 views
1

我是Symfony的新手,我嘗試使用Sonata和Doctrine ORM創建數據庫接口。起初,我讀了this tutorial,幾天後,它開始在我的VirtualBox機器Ubuntu服務器上工作。如何使用SonataAdminBundle

現在,我試圖在另一個包中使用奏鳴曲管理員。

所以,I`ve了我SonataAdminBundle這裏:

/var/www/Symfony/testsonata/src/Application/Sonata 

和新包在這裏:

/var/www/Symfony/testsonata/src/Application/MyDbBundle 

m trying to use [this man](http://symfonydev.ru/symfony-back-and-front-interfaces/) (it S於俄語)。

接下來,我ve got working Sonata, I米創造了新的軟件包後:

$ php app/console generate:bundle --namespace=Application/MyDbBundle 

You are going to generate a "Application\MyDbBundle\MyDbBundle" bundle 
in "/var/www/Symfony/testsonata/src/" using the "annotation" format. 

然後,我跑到下面的命令:

$ php app/console doctrine:mapping:import MyDbBundle xml --filter=Link 
writing /var/www/Symfony/testsonata/src/Application/MyDbBundle/Resources/config/doctrine/Link.orm.xml 

$ php app/console doctrine:generate:entities --path="/var/www/Symfony/testsonata/src" MyDbBundle:Link 

Generating entities for namespace "Application\MyDbBundle\Entity\Link" 
    > backing up Link.php to Link.php~ 
    > generating Application\MyDbBundle\Entity\Link 

而我想做的最後一件事,就是創建一個管理類和一個服務描述

我已經創建了這個文件/var/www/Symfony/testsonata/src/Application/MyDbBundle/Admin/LinkAdmin.php它包含:

<?php 
namespace Application\MyDbBundle\Admin; 

use Sonata\AdminBundle\Admin\Admin; 
use Sonata\AdminBundle\Form\FormMapper; 
use Sonata\AdminBundle\Datagrid\DatagridMapper; 
use Sonata\AdminBundle\Datagrid\ListMapper; 
use Knp\Menu\ItemInterface as MenuItemInterface; 
use My\DbBundle\Entity\Link; 

class LinkAdmin extends Admin 
{ 
    protected function configureDatagridFilters(DatagridMapper $datagridMapper) 
    { 
     $datagridMapper->add('title') 
         ->add('url'); 
    } 

    protected function configureListFields(ListMapper $listMapper) 
    { 
     $listMapper->addIdentifier('title') 
        ->add('url') 
        ->add('updatedAt'); 
    } 

    protected function configureFormFields(FormMapper $formMapper) 
    { 
     $formMapper->add('title') 
        ->add('url') 
        ->add('annotation'); 
    } 
} 

而且我將此添加到我的services.xml

<container xmlns="http://symfony.com/schema/dic/services" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd"> 
    <services> 
     <service id="sonata.admin.my.db.link" class="Application\MyDbBundle\Admin\LinkAdmin"> 
      <tag name="sonata.admin" manager_type="orm" group="Databases" label="Links"/> 
      <argument/> 
      <argument>Application\MyDbBundle\Entity\Link</argument> 
      <argument>SonataAdminBundle:CRUD</argument> 
     </service> 
    </services> 
</container> 

當我去

http://localhost/Symfony/testsonata/web/app_dev.php/admin/dashboard 

我得到這個消息:

InvalidArgumentException:[錯誤94]驗證失敗:找不到DTD! (在N/A - 第5行,第20欄) [ERROR 5]在文檔的末尾附加含量(N/A - 22行,第1列)

我在做什麼錯誤?

回答

0

根據錯誤,你的xml配置文件出了問題。開始時爲什麼會有<argument/>?這可能是問題所在。

PS:我的意思是,這個<argument></argument>的效果更好嗎?

+0

是的,我沒有注意到這一點。刪除它,並更改了這個 使用My \ DbBundle \ Entity \ Link; 至 使用Application \ MyDbBundle \ Entity \ Link; 但沒有任何變化。 可能是錯誤的,然後symfony試圖加載sonata.admin.my.db.link?或路徑有問題..但我沒有看到錯誤 – user1935987

+0

你在哪裏找到''這一行?如果我沒有錯,這裏定義了DTD。是使用XML的義務?我發現了更多的yaml格式的資源。嘗試添加這個'<?xml version =「1。0「encoding =」UTF-8「standalone =」yes「?> – martinqt

+0

http://symfonydev.ru/symfony-back-and-front-interfaces/ <?xml version =」1.0 「encoding =」UTF-8「standalone =」yes「?> 這不會產生任何影響 – user1935987

0

或者我可能需要另闢蹊徑?因爲MyDbBundle和Sonata在不同的目錄中

+0

我不認爲就是這樣。我的項目在src /和sonata中有一個捆綁銷售商/ – martinqt