Как использовать SonataAdminBundle

Я новичок в Symfony и пытаюсь создать интерфейс базы данных с помощью Sonata и Doctrine ORM. Сначала я прочитал это руководство, и через несколько дней все это заработает на моем сервере Ubuntu VirtualBox.

Теперь я пытаюсь использовать админку сонаты в другом комплекте.

Итак, у меня есть пакет SonataAdminBundle:

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

И новый набор здесь:

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

Im trying to use [this man](http://symfonydev.ru/symfony-back-and-front-interfaces/) (its на русском языке).

Далее, после того как Ive got working Sonata, Im создал новый бандл:

$ 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 не найден! (в н/д - строка 5, столбец 20) [ОШИБКА 5] Дополнительный контент в конце документа (в н/д - строка 22, столбец 1)

Что я делаю не так?


person user1935987    schedule 29.12.2012    source источник


Ответы (2)


Согласно ошибке, что-то пошло не так с вашим файлом конфигурации xml. Почему в начале стоит <argument/>? Это может быть проблемой.

PS: Я имею в виду, этот <argument></argument> работает лучше?

person martinqt    schedule 29.12.2012
comment
да, я неt noticed this. deleted it <argument/>, and changed this use My\DbBundle\Entity\Link; to use Application\MyDbBundle\Entity\Link; but nothing changes. maybe something wrong then symfony tryed to load sonata.admin.my.db.link ? or something wrong with the paths.. but i didnне вижу ошибок - person user1935987; 30.12.2012
comment
Где вы нашли строку <container>? Если я не ошибаюсь, здесь определяется DTD. Является ли использование xml обязательным? Я нашел больше ресурсов в формате yaml. Попробуйте добавить это <?xml version = "1.0" encoding="UTF-8" standalone="yes" ?> - person martinqt; 30.12.2012
comment
symfonydev.ru/symfony-back-and-front-interfaces из этого руководство. ‹?xml version = 1.0 encoding=UTF-8 standalone=yes ?› это не имеет никакого эффекта - person user1935987; 31.12.2012
comment
Попробуйте поместить в свой файл только <service></service> и его дочерние элементы, поскольку документ, кажется, так говорит. Если вы попытаетесь получить доступ к обоим URL-адресам, начинающимся с symfony.com, веб-сайт вернет ошибку 404, что объясняет отсутствие DTD. Вы также можете попытаться удалить эти ссылки из тега контейнера. - person martinqt; 31.12.2012
comment
тогда это выглядит так ‹?xml version = 1.0 encoding=UTF-8 standalone=yes ?› ‹services› ‹service id=sonata.admin.my.db.link class=Application\MyDbBundle\Admin\LinkAdmin› ‹ tag name=sonata.admin manager_type=orm group=Базы данных label=Ссылки/› ‹argument›Application\MyDbBundle\Entity\Link‹/argument› ‹argument›SonataAdminBundle:CRUD‹/argument› ‹/service› ‹/services› - person user1935987; 02.01.2013
comment
и ошибка InvalidArgumentException: [ОШИБКА 1845] Элемент «услуги»: нет соответствующего глобального объявления, доступного для корня проверки. (в /var/www/Symfony/testsonata/web/ — строка 2, столбец 0) - person user1935987; 02.01.2013
comment
Есть ли трассировка стека под ошибкой? Вы уверены, что проблема именно в этом файле? Потому что в 22-й строке написано дополнительный контент, а там всего 12 строк. - person martinqt; 02.01.2013
comment
А также, вы используете его локально или на веб-сервере? Поскольку php DOM требуется доступ в Интернет для получения DTD. Некоторые люди говорят, что это может быть проблема с хостингом. - person martinqt; 02.01.2013
comment
Я не уверен, в чем проблема в этом файле, но это происходит, когда я пытаюсь изменить этот файл. любые возможности? я использую его на локальных серверах apache2+mysql - person user1935987; 06.01.2013
comment
С доступом в интернет или без? Можете ли вы попробовать использовать пример yaml? Просто чтобы посмотреть, не связана ли проблема с конфигом или с чем-то еще. - person martinqt; 06.01.2013
comment
С доступом в интернет или без? - оба варианта. какой пример yaml вы имеете в виду? - person user1935987; 09.01.2013
comment
Этот services: sonata.news.admin.post: class: Sonata\NewsBundle\Admin\PostAdmin tags: - { name: sonata.admin, manager_type: orm, group: sonata_blog, label: post } arguments: [null, Sonata\NewsBundle\Entity\Post, SonataNewsBundle:PostAdmin] Конечно, настройте его так, чтобы он соответствовал вашим путям. Найдено в нижней части sonata-project.org/bundles/admin. /master/doc/reference/ Ps: посмотрите на ссылку, чтобы найти пробел, потому что это важно в yaml. - person martinqt; 09.01.2013
comment
Только что увидел, что есть пример xml чуть выше yaml. Они ставят только <service></service> без <conatiner> или <services>. - person martinqt; 09.01.2013

или, может быть, мне нужно сделать другие пути? потому что MyDbBundle и Sonata находятся в разных каталогах

person user1935987    schedule 30.12.2012
comment
Я не думаю, что это все. В моем проекте есть пакет в src/ и соната в vendor/ - person martinqt; 30.12.2012