2015-09-09 2 views
1

я пытаюсь сонатной администратора конфигурировать пакет, но я имею эту ошибку:Ошибка: Попытка загрузить класс «ProductAdmin» из пространства имен «Admin AdminBundle Admin»

  1. Пытался загрузить класс «ProductAdmin» из пространства имен «Admin \ AdminBundle \ Admin». Вы забыли оператор «use» для другого пространства имен?

    защищенная функция getSonata_Admin_ProductService() { $ Экземпляр = новый \ Admin \ AdminBundle \ Admin \ ProductAdmin ('sonata.admin.product', 'Admin \ AdminBundle \ Entity \ Продукт', 'SonataAdminBundle: CRUD') ; $ instance-> setTranslationDomain ('AdminAdminBundle'); $ instance-> setFormTheme (array (0 => 'SonataDoctrineORMAdminBundle: Form: form_admin_fields.html.twig));

У кого-то есть идея, как пропустить эту ошибку?

Спасибо

config.yml

imports: 
    - { resource: parameters.yml } 
    - { resource: security.yml } 
    - { resource: services.yml } 
    - { resource: @AdminAdminBundle/Resources/config/admin.yml } 
# app/config/config.yml 
sonata_block: 
    default_contexts: [cms] 
    blocks: 
     # Enable the SonataAdminBundle block 
     sonata.admin.block.admin_list: 
      contexts: [admin] 
     # Your other blocks 

Admin.yml

services: 
    sonata.admin.Product: 
     class: Admin\AdminBundle\Admin\ProductAdmin 
     tags: 
      - { name: sonata.admin, manager_type: orm, group: "Content", label: "Product" } 
     arguments: 
      - ~ 
      - Admin\AdminBundle\Entity\Product 
      - ~ 
     calls: 
      - [ setTranslationDomain, [AdminAdminBundle]] 

ProductAdmin.php

<?php 
// src/Acme/DemoBundle/Admin/PostAdmin.php 

namespace Admin\AdminBundle\Admin; 

use Sonata\AdminBundle\Admin\Admin; 
use Sonata\AdminBundle\Datagrid\ListMapper; 
use Sonata\AdminBundle\Datagrid\DatagridMapper; 
use Sonata\AdminBundle\Form\FormMapper; 

class ProductAdmin extends Admin 
{ 
    // Fields to be shown on create/edit forms 
    protected function configureFormFields(FormMapper $formMapper) 
    { 
     $formMapper 
      ->add('title', 'text', array('label' => 'Post Title')) 
      ->add('author', 'entity', array('class' => 'Admin\AdminBundle\Entity\Product')) 
      ->add('body') //if no type is specified, SonataAdminBundle tries to guess it 
     ; 
    } 

    // Fields to be shown on filter forms 
    protected function configureDatagridFilters(DatagridMapper $datagridMapper) 
    { 
     $datagridMapper 
      ->add('title') 
      ->add('author') 
     ; 
    } 

    // Fields to be shown on lists 
    protected function configureListFields(ListMapper $listMapper) 
    { 
     $listMapper 
      ->addIdentifier('title') 
      ->add('slug') 
      ->add('author') 
     ; 
    } 
} 

AdminAdminExtension.php

<?php 

namespace Admin\AdminBundle\DependencyInjection; 

use Symfony\Component\DependencyInjection\ContainerBuilder; 
use Symfony\Component\Config\FileLocator; 
use Symfony\Component\HttpKernel\DependencyInjection\Extension; 
use Symfony\Component\DependencyInjection\Loader; 

/** 
* This is the class that loads and manages your bundle configuration 
* 
* To learn more see {@link http://symfony.com/doc/current/cookbook/bundles/extension.html} 
*/ 
class AdminAdminExtension extends Extension 
{ 
    /** 
    * {@inheritdoc} 
    */ 
    public function load(array $configs, ContainerBuilder $container) 
    { 
     $configuration = new Configuration(); 
     $config = $this->processConfiguration($configuration, $configs); 

     $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); 
     $loader->load('services.yml'); 
     $loader->load('admin.yml'); 
    } 
} 

autoload.php

<?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; 

ответ

1

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

<?php 
require_once 'vendor/autoload.php'; 
var_dump(class_exists('a\b\c')); 

Тот факт, что ваши состояния файла источник другой путь, чем ваша структура пространства имен указывает, что ваш класс не в том месте.

+0

привет Жерар, я новичок в symfony, поэтому я пытаюсь понять .. Я проверил пространства имен, и кажется, что все в порядке. в моей конфигурации автозагрузки я вижу, что я не загружал сонату проекта, может быть, из-за этого может возникнуть ошибка? как я могу добавить эти строки в автозагрузку. $ loader-> registerNamespaces (array ( // ... 'Sonata' => __DIR __. '/ ../vendor/bundles', 'Exporter' => __DIR __. '/ ../vendor/exporter/lib ', ' Knp \ Bundle '=> __DIR __.'/../vendor/bundles ', ' Knp \ Menu '=> __DIR __.'/../vendor/KnpMenu/src ', // ... )); – Dario

+0

Это должно быть настроено внутри вашего проекта composer.json в разделе '' autoload ''. Может, там что-то не так? См. Https://getcomposer.org/doc/04-schema.md#autoload для получения дополнительной информации. –

 Смежные вопросы

  • Нет связанных вопросов^_^