SonataProductBundle(symfony 2.8)而不是显示产品创建形式有"没有可用的对象类型"按钮显示

时间:2018-01-01 12:22:39

标签: symfony symfony-sonata sonata symfony-2.8

SonataProductBundle启用了Sonata Admin。 产品实体根据文档进行配置。 但是,在尝试创建新的"产品"在管理面板中, "没有可用的对象类型"按钮出现而不是编辑形式。

以下是配置:

config.yml

imports:
    - { resource: parameters.yml }
    - { resource: security.yml }
    - { resource: services.yml }
    - { resource: sonata/sonata_product.yml }
    - { resource: '@ApplicationSonataProductBundle/Resources/config/product.yml' }
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:
        # handler_id set to null will use default session handler from php.ini
        handler_id:  ~
    fragments:       ~
    http_method_override: true

Twig配置

twig:
    debug:            "%kernel.debug%"
    strict_variables: "%kernel.debug%"
    form:
       resources:
           - 'SonataFormatterBundle:Form:formatter.html.twig'

学说配置

doctrine:
    dbal:
        driver:   pdo_mysql
        host:     "%database_host%"
        port:     "%database_port%"
        dbname:   "%database_name%"
        user:     "%database_user%"
        password: "%database_password%"
        charset:  UTF8
        types:
            json: Sonata\Doctrine\Types\JsonType
            currency: Sonata\Component\Currency\CurrencyDoctrineType
    orm:
        auto_generate_proxy_classes: "%kernel.debug%"
        entity_managers:
            default:
            naming_strategy: doctrine.orm.naming_strategy.underscore
                auto_mapping: true
                mappings:
                    FOSUserBundle: ~
                    ApplicationSonataUserBundle: ~
                    SonataUserBundle: ~
                    SonataMediaBundle: ~
                    ApplicationSonataMediaBundle: ~
                    SonataNotificationBundle: ~
                    ApplicationSonataNotificationBundle: ~
                    SonataClassificationBundle: ~
                    ApplicationSonataClassificationBundle: ~
                    SonataClassificationBundle: ~
                    ApplicationSonataCustomerBundle: ~
                    SonataCustomerBundle: ~
                    ApplicationSonataProductBundle: ~
                    SonataProductBundle: ~
                    ApplicationSonataPageBundle: ~ 
                    SonataPageBundle: ~

Swiftmailer配置

swiftmailer:
    transport: "%mailer_transport%"
    host:      "%mailer_host%"
    username:  "%mailer_user%"
    password:  "%mailer_password%"
    spool:     { type: memory }
sonata_block:
    default_contexts: [cms]
    blocks:
        # enable the SonataAdminBundle block
        sonata.admin.block.admin_list:
            contexts: [admin]
        # ...
        sonata.user.block.menu:    # used to display the menu in profile pages
        sonata.user.block.account: # used to display menu option (login option)
        sonata.block.service.text:
        sonata.order.block.recent_orders:
    context_manager: sonata.page.block.context_manager
sonata_admin:
    title:      IASP
    title_logo: /bundles/sonataadmin/logo_title.png   
    options:
        html5_validate:    true     # enable or disable html5 form validation
        confirm_exit:      true     # enable or disable a confirmation before navigating away
        use_select2:       true     # enable or disable usage of the Select2 jQuery library
        use_icheck:        true     # enable or disable usage of the iCheck library
        use_bootlint:      false    # enable or disable usage of Bootlint
        use_stickyforms:   true     # enable or disable the floating buttons
        form_type:         standard # can also be 'horizontal'

    templates:
        dashboard: SonataAdminBundle:Core:dashboard.html.twig
        edit:              SonataAdminBundle:CRUD:edit.html.twig
        tab_menu_template:         SonataAdminBundle:Core:tab_menu_template.html.twig

fos_user:
    db_driver:        orm # can be orm or mongodb (support is also available within FOSUser for couchdb, propel but none is given for SonataUserBundle)
    firewall_name:    main
    user_class:       Application\Sonata\UserBundle\Entity\User

    group:
        group_class:  Application\Sonata\UserBundle\Entity\Group

    profile:
        # Authentication Form
        form:
            type:               fos_user_profile
            handler:            fos_user.profile.form.handler.default
            name:               fos_user_profile_form
            validation_groups:  [Authentication] # Please note : this is not the default value

sonata_user:
    security_acl:           false

    manager_type: orm # Can be orm for mongodb

    table:
        user_group: "my_custom_user_group_association_table_name"

    impersonating:
        route:                page_slug
        parameters:           { path: / }

    class:                  # Entity Classes
        user:               Application\Sonata\UserBundle\Entity\User
        group:              Application\Sonata\UserBundle\Entity\Group

    admin:                  # Admin Classes
        user:
            class:          Sonata\UserBundle\Admin\Entity\UserAdmin
            controller:     SonataAdminBundle:CRUD
            translation:    SonataUserBundle

        group:
            class:          Sonata\UserBundle\Admin\Entity\GroupAdmin
            controller:     SonataAdminBundle:CRUD
            translation:    SonataUserBundle
    profile:
        form:
            type:               sonata_user_profile
            handler:            sonata.user.profile.form.handler.default
            name:               sonata_user_profile_form
            validation_groups:  [Profile]
        # Profile show page is a dashboard as in SonataAdminBundle
        dashboard:
            blocks:
                - { position: left, type: sonata.block.service.text, settings: { content: "<h2>Welcome!</h2> This is a sample user profile dashboard, feel free to override it in the configuration! Want to make this text dynamic? For instance display the user's name? Create a dedicated block and edit the configuration!"} }
                - { position: left, type: sonata.order.block.recent_orders, settings: { title: Recent Orders, number: 5, mode: public }}
                #- { position: right, type: sonata.timeline.block.timeline, settings: { max_per_page: 15 }}
                #- { position: right, type: sonata.news.block.recent_posts, settings: { title: Recent Posts, number: 5, mode: public }}
                #- { position: right, type: sonata.news.block.recent_comments, settings: { title: Recent Comments, number: 5, mode: public }}
        # Customize user portal menu by setting links
        menu:
            - { route: 'sonata_user_profile_show', label: 'sonata_profile_title', domain: 'SonataUserBundle'}
            - { route: 'sonata_user_profile_edit', label: 'link_edit_profile', domain: 'SonataUserBundle'}
            - { route: 'sonata_customer_addresses', label: 'link_list_addresses', domain: 'SonataCustomerBundle'}
            - { route: 'sonata_user_profile_edit_authentication', label: 'link_edit_authentication', domain: 'SonataUserBundle'}
            - { route: 'sonata_order_index', label: 'order_list', domain: 'SonataOrderBundle'}
sonata_delivery:
    services:
        free_address_required:
            name: Free
            priority: 1
            code: free
    selector: sonata.delivery.selector.default

sonata_media:
    class:
        media: Application\Sonata\MediaBundle\Entity\Media
        gallery: Application\Sonata\MediaBundle\Entity\Gallery
        gallery_has_media: Application\Sonata\MediaBundle\Entity\GalleryHasMedia
        category:  Application\Sonata\ClassificationBundle\Entity\Categor
    default_context: default
    db_driver: doctrine_orm # or doctrine_mongodb, doctrine_phpcr
    contexts:
        default:  # the default context is mandatory
            providers:
                - sonata.media.provider.dailymotion
                - sonata.media.provider.youtube
                - sonata.media.provider.image
                - sonata.media.provider.file
                - sonata.media.provider.vimeo

            formats:
                small: { width: 100 , quality: 70}
                big:   { width: 500 , quality: 70}
    cdn:
        server:
            path: /uploads/media # http://media.sonata-project.org/

    filesystem:
        local:
            directory:  "%kernel.root_dir%/../web/uploads/media"
            create:     false
    providers:
        image:
            thumbnail:  sonata.media.thumbnail.consumer.format
        vimeo:
            thumbnail:  sonata.media.thumbnail.consumer.format
        youtube:
            thumbnail:  sonata.media.thumbnail.consumer.format
        dailymotion:
            thumbnail:  sonata.media.thumbnail.consumer.format
        file:
            allowed_extensions: ['mp4', 'flv']
            allowed_mime_types: ['video/mp4', 'video/x-flv']
            thumbnail:  sonata.media.thumbnail.consumer.format
        image:
            resizer: sonata.media.resizer.square
sonata_payment:
    services:
        pass:
            name:    Pass
            code:    pass
            browser: sonata.payment.browser.curl

            transformers:
                basket: sonata.payment.transformer.basket
                order:  sonata.payment.transformer.order

            options:
                shop_secret_key: assdsds
                url_callback:    sonata_payment_callback
                url_return_ko:   sonata_payment_error
                url_return_ok:   sonata_payment_confirmation
    transformers:
        order:  sonata.payment.transformer.order
        basket: sonata.payment.transformer.basket

sonata_price:
    currency: EUR
sonata_customer:
    class:
        customer:           Application\Sonata\CustomerBundle\Entity\Customer
        address:              Application\Sonata\CustomerBundle\Entity\Address
        order:                Application\Sonata\OrderBundle\Entity\Order
        user:                 Application\Sonata\UserBundle\Entity\User

        # You can also implement custom components classes
        customer_selector:    Sonata\Component\Customer\CustomerSelector

sonata_notification:
    backend: sonata.notification.backend.runtime
    admin:
        enabled: false
sonata_classification:
    class:
        tag:          Application\Sonata\ClassificationBundle\Entity\Tag
        category:     Application\Sonata\ClassificationBundle\Entity\Category
        collection:   Application\Sonata\ClassificationBundle\Entity\Collection
        media:        Application\Sonata\MediaBundle\Entity\Media
        context:      Application\Sonata\ClassificationBundle\Entity\Context

    admin:
        tag:
            class:        Sonata\ClassificationBundle\Admin\TagAdmin
            controller:   SonataAdminBundle:CRUD
            translation:  SonataClassificationBundle
        category:
            class:        Sonata\ClassificationBundle\Admin\CategoryAdmin
            controller:   SonataClassificationBundle:CategoryAdmin
            translation:  SonataClassificationBundle
        collection:
            class:        Sonata\ClassificationBundle\Admin\CollectionAdmin
            controller:   SonataAdminBundle:CRUD
            translation:  SonataClassificationBundle
        context:
            class:        Sonata\ClassificationBundle\Admin\ContextAdmin
            controller:   SonataAdminBundle:CRUD
            translation:  SonataClassificationBundle  
jms_serializer:
    enable_short_alias: true

sonata_formatter:
    default_formatter: text
    formatters:
        markdown:
            service: sonata.formatter.text.markdown
            extensions:
                - sonata.formatter.twig.control_flow
                - sonata.formatter.twig.gist
        #        - sonata.media.formatter.twig


        text:
            service: sonata.formatter.text.text
            extensions:
                - sonata.formatter.twig.control_flow
                - sonata.formatter.twig.gist
        #        - sonata.media.formatter.twig


        rawhtml:
            service: sonata.formatter.text.raw
            extensions:
                - sonata.formatter.twig.control_flow
                - sonata.formatter.twig.gist
        #        - sonata.media.formatter.twig


        richhtml:
            service: sonata.formatter.text.raw
            extensions:
                - sonata.formatter.twig.control_flow
                - sonata.formatter.twig.gist
        #        - sonata.media.formatter.twig


        twig:
            service: sonata.formatter.text.twigengine
            extensions: [] # Twig formatter cannot have extensions


sonata_product:
    class:
        product:              Application\Sonata\ProductBundle\Entity\Product
        package:              Application\Sonata\ProductBundle\Entity\Package
        product_category:     Application\Sonata\ProductBundle\Entity\ProductCategory
        product_collection:   Application\Sonata\ProductBundle\Entity\ProductCollection
        category:             Application\Sonata\ClassificationBundle\Entity\Category
        collection:           Application\Sonata\ClassificationBundle\Entity\Collection
        delivery:             Application\Sonata\ProductBundle\Entity\Delivery
        gallery:              Application\Sonata\MediaBundle\Entity\Gallery
sonata_page:

    slugify_service:   sonata.core.slugify.cocur # old BC value is sonata.core.slugify.native
    multisite:        host_by_locale
    default_template: default # template key from templates section, used as default for new pages
    templates:
        default:  { path: 'SonataPageBundle::layout.html.twig',          name: 'default' }
        2columns: { path: 'SonataPageBundle::2columns_layout.html.twig', name: '2 columns layout' }

    # Generates a snapshot when a page is saved (from the admin)
    direct_publication: false # or %kernel.debug% if you want to publish in dev mode (but not in prod)
    use_streamed_response: false # set the value to false in debug mode or if the reverse proxy does not handle streamed response
    ignore_route_patterns:
        - ^(.*)admin(.*)   # ignore admin route, ie route containing 'admin'
        - ^_(.*)          # ignore symfony routes

    ignore_routes:
        - sonata_page_cache_esi
        - sonata_page_cache_ssi
        - sonata_page_js_sync_cache
        - sonata_page_js_async_cache
        - sonata_cache_esi
        - sonata_cache_ssi
        - sonata_cache_js_async
        - sonata_cache_js_sync
        - sonata_cache_apc

    ignore_uri_patterns:
        - ^/admin\/   # ignore admin route, ie route containing 'admin'

    page_defaults:
        homepage: {decorate: false, enabled: true} # disable decoration for homepage, key - is a page route

    # manage the http errors
    catch_exceptions:
        not_found: [404]    # render 404 page with "not_found" key (name generated: _page_internal_error_{key})
        fatal:     [500]    # so you can use the same page for different http errors or specify specific page for each error
    cache_invalidation:
        service:  sonata.page.cache.invalidation.simple
        recorder: sonata.page.cache.recorder
        classes:
            "Application\Sonata\PageBundle\Entity\Block": getId
cmf_routing:
    chain:
        routers_by_id:
            # enable the DynamicRouter with high priority to allow overwriting configured routes with content
            #cmf_routing.dynamic_router: 200
            # enable the symfony default router with a lower priority
            sonata.page.router: 150
            router.default: 100

composer.json

    {
        "name": "dmlabs-5/iasp_new",
        "license": "proprietary",
        "type": "project",
        "autoload": {
            "psr-4": {
                " \\": "src",
                "AppBundle\\": "src/AppBundle",
                "Application\\": "src/Application",
                "ApplicationSonataMediaBundle\\": "src/Application/Sonata/MediaBundle",
                "ApplicationSonataNotificationBundle\\": "src/Application/Sonata/NotificationBundle",
                 "ApplicationSonataCustomerBundle\\":"src/Application/Sonata/CustomerBundle",
            "ApplicationSonataDeliveryBundle\\":"src/Application/Sonata/DeliveryBundle",
            "ApplicationSonataClassificationBundle\\":"src/Application/Sonata/ClassificationBundle"
            },
            "classmap": [
                "app/AppKernel.php",
                "app/AppCache.php"
            ]
        },
        "require": {
            "php": ">=5.3.9",
            "symfony/symfony": "2.8.*",
            "doctrine/orm": "^2.4.8",
            "doctrine/doctrine-bundle": "~1.4",
            "ocramius/proxy-manager": "^1.0",
            "symfony/swiftmailer-bundle": "~2.3",
            "symfony/monolog-bundle": "~2.4",
            "sensio/distribution-bundle": "~5.0",
            "sensio/framework-extra-bundle": "^3.0.2",
            "incenteev/composer-parameter-handler": "~2.0",
            "sonata-project/admin-bundle": "3.x-dev",
            "sonata-project/doctrine-orm-admin-bundle": "3.x-dev",
            "sonata-project/easy-extends-bundle": "^2.3",
            "sonata-project/user-bundle": "3.x-dev",
            "doctrine/doctrine-migrations-bundle": "^1.0",
            "sonata-project/classification-bundle": "^3.0",
            "sonata-project/cache-bundle": "^2.3",
            "sonata-project/seo-bundle": "^2.1",
            "sonata-project/notification-bundle": "^3.1",
            "sonata-project/page-bundle": "^3.4",
            "sonata-project/media-bundle": "^3.5",
            "sonata-project/ecommerce": "3.x-dev",
            "sonata-project/intl-bundle": "2.x-dev",
            "sonata-project/formatter-bundle": "^3.1",
            "jms/serializer-bundle": "^1.0",
            "twig/twig": "^1.34",
            "sonata-project/translation-bundle": "2.0.2"
        },  
        "require-dev": {
            "sensio/generator-bundle": "~3.0",
            "symfony/phpunit-bridge": "~2.7"
        },
        "scripts": {
            "post-install-cmd": [
            "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::prepareDeploymentTarget"
            ],
            "post-update-cmd": [
            "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::prepareDeploymentTarget"
            ]
        },
        "config": {
            "bin-dir": "bin"
        },
        "extra": {
            "symfony-app-dir": "app",
            "symfony-web-dir": "web",
            "symfony-assets-install": "relative",
            "incenteev-parameters": {
                "file": "app/config/parameters.yml"
            },
            "branch-alias": null
        }
    }

有谁知道,为什么会出现这个按钮?是否以错误的方式配置?

enter image description here

1 个答案:

答案 0 :(得分:0)

你得到同样的错误,因为你可能会犯同样的错误?查看您的简单实体并注意继承的Product类...您将Product类定义为抽象...但您的Product类正在扩展未在您的帖子中显示的BaseProduct类...

这个继承链对我来说很奇怪。你能检查一下,你的BaseProduct也不是抽象的吗?