Nano Hash - криптовалюты, майнинг, программирование

Тип блока sonata.admin.block.admin_list не существует

Я только что попытался установить Symfony CMF с пакетом администратора Sonata, но у меня возникли некоторые проблемы с его включением. Видимо, я не первый, но другие ответы, к сожалению, мне не очень помогли.

Это мое полное исключение:

Во время рендеринга шаблона возникло исключение ("Тип блока "sonata.admin.block.admin_list" не существует") в SonataAdminBundle:Core:dashboard.html.twig в строке 35.

А это мой AppKernel.php:

$bundles = array(
    // Symfony Standard Edition Bundles
    new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
    new Symfony\Bundle\SecurityBundle\SecurityBundle(),
    new Symfony\Bundle\TwigBundle\TwigBundle(),
    new Symfony\Bundle\MonologBundle\MonologBundle(),
    new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
    new Symfony\Bundle\AsseticBundle\AsseticBundle(),
    new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
    new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),

    // Symfony CMF Standard Edition Bundles
    new Doctrine\Bundle\PHPCRBundle\DoctrinePHPCRBundle(),
    new Doctrine\Bundle\DoctrineCacheBundle\DoctrineCacheBundle(),
    new Symfony\Cmf\Bundle\CoreBundle\CmfCoreBundle(),
    new Symfony\Cmf\Bundle\ContentBundle\CmfContentBundle(),
    new Symfony\Cmf\Bundle\RoutingBundle\CmfRoutingBundle(),
    new Symfony\Cmf\Bundle\SimpleCmsBundle\CmfSimpleCmsBundle(),

    new Symfony\Cmf\Bundle\BlockBundle\CmfBlockBundle(),
    new Sonata\BlockBundle\SonataBlockBundle(),
    new Sonata\CoreBundle\SonataCoreBundle(),

    new Symfony\Cmf\Bundle\MenuBundle\CmfMenuBundle(),
    new Knp\Bundle\MenuBundle\KnpMenuBundle(),

    new Symfony\Cmf\Bundle\CreateBundle\CmfCreateBundle(),
    new FOS\RestBundle\FOSRestBundle(),
    new JMS\SerializerBundle\JMSSerializerBundle(),

    new Sonata\jQueryBundle\SonatajQueryBundle(),
    new Sonata\DoctrinePHPCRAdminBundle\SonataDoctrinePHPCRAdminBundle(),
    new Sonata\AdminBundle\SonataAdminBundle(),

    // Remove this Bundle when using the SE as the basis for a new project
    new Acme\DemoBundle\AcmeDemoBundle(),
);

Мои соответствующие части config.yml:

# Sonata
sonata_block:
    default_contexts: [cms]
    blocks:
        sonata.admin.block.admin_list:
          contexts: [admin]
        sonata.user.block.menu:
        sonata.user.block.account:
        sonata.block.service.text:

И в конце моя маршрутизация:

admin:
    resource: '@SonataAdminBundle/Resources/config/routing/sonata_admin.xml'
    prefix: /admin

_sonata_admin:
    resource: .
    type: sonata_admin
    prefix: /admin

Будем очень признательны за любую помощь, я полагаю, что следовал инструкциям, и мое единственное изменение — добавление моего IP-адреса в app_dev.php. Я также пытался очистить свой кеш без каких-либо результатов....


  • у меня похожая ошибка 22.09.2016

Ответы:


1

Ошибка говорит о том, что ваш конфиг sonata_block не прочитан или возможно перезаписан.

Не могли бы вы проверить, есть ли у вас дубликат определения в одном из ваших конфигурационных файлов (config*.yml)?

23.07.2015
  • Привет! Нет, config_dev или config_prod не содержат ничего, связанного с сонатой :/ 23.07.2015

  • 2

    Я некоторое время ломал голову над этим, и, добавив отладочный дамп загрузчиков блоков в Sonata\BlockBundle\Block\BlockLoaderChain::load(), я смог увидеть, что мой загрузчик блоков по умолчанию возвращает true на if ($loader->support($block)) {.... Это превзошло сервисный загрузчик Sonata, который должен поддерживать (и загружать) этот блок. Погрузчики:

    array:2 [▼
      0 => BlockLoader {#617 ▼
        #entityManager: DoctrineORMEntityManager_000000005e8b2927000000004be687142a8746960d6f2b18cb3522b67eef8a8d {#208 …2}
        #types: array:3 [▼
          0 => "cmf.block.action"
          1 => "cmf.block.container"
          2 => "cmf.block.simple"
        ]
      }
      1 => ServiceLoader {#618 ▼
        #types: array:1 [▼
          0 => "sonata.admin.block.admin_list"
        ]
      }
    ]
    

    Причина в том, что мой загрузчик расширяет ServiceLoader, а ->support($block) просто проверяет, содержит ли метамассив блока «тип».

    Поэтому я добавил свой собственный метод support() в свой загрузчик блоков, который теперь будет поддерживать только те типы, которые я определил. Вот весь загрузчик:

    namespace ExampleBundle\Cms\Loader;
    
    use Doctrine\ORM\EntityManager;
    use Doctrine\ORM\EntityRepository;
    use Sonata\BlockBundle\Block\Loader\ServiceLoader;
    use Sonata\BlockBundle\Model\BlockInterface;
    
    /**
     * ORM block loader.
     */
    class BlockLoader extends ServiceLoader
    {
        /**
         * @var string
         */
        const TYPE_ACTION = 'cmf.block.action';
    
        /**
         * @var string
         */
        const TYPE_CONTAINER = 'cmf.block.container';
    
        /**
         * @var string
         */
        const TYPE_SIMPLE = 'cmf.block.simple';
    
        /**
         * @var \Doctrine\ORM\EntityManager
         */
        protected $entityManager;
    
        /**
         * {@inheritdoc}
         */
        public function __construct(EntityManager $entityManager)
        {
            $this->entityManager = $entityManager;
    
            parent::__construct(array(
                self::TYPE_ACTION,
                self::TYPE_CONTAINER,
                self::TYPE_SIMPLE,
            ));
        }
    
        /**
         * {@inheritdoc}
         */
        public function load($configuration): BlockInterface
        {
            $blockDefault = parent::load($configuration);
    
            $block = $this->getRepository($configuration['type'])->findOneByName($configuration['name']);
    
            return $block instanceof BlockInterface ? $block : $blockDefault;
        }
    
        /**
         * Get the repository for a given block type.
         *
         * @param string $type The block type.
         *
         * @return \Doctrine\ORM\Repository
         */
        protected function getRepository(string $type): EntityRepository
        {
            foreach ($this->entityManager->getMetadataFactory()->getAllMetadata() as $metadata) {
                if ($metadata->discriminatorValue === $type) {
                    $baseName = str_replace($metadata->namespace . '\\', '', $metadata->name);
                    return $this->entityManager->getRepository(sprintf('CmsBlock:%s', $baseName));
                }
            }
    
            throw new \RuntimeException(sprintf('Could not find repository for block type "%s%.', $type));
        }
    
        /**
         * {@inheritdoc}
         */
        public function support($configuration)
        {
            if (parent::support($configuration) && $this->exists($configuration['type'])) {
                return true;
            }
    
            return false;
        }
    }
    
    13.01.2017
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..