SonataProductBundle(symfony 2.8)而不是显示产品创建表单,而是出现“没有可用的对象类型”按钮
Posted
技术标签:
【中文标题】SonataProductBundle(symfony 2.8)而不是显示产品创建表单,而是出现“没有可用的对象类型”按钮【英文标题】:SonataProductBundle (symfony 2.8) instead of showing product create form there is "No object types available" button appearing 【发布时间】:2018-06-11 11:44:15 【问题描述】:有启用 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:
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
有谁知道,为什么会出现这个按钮?是不是配置错了?
【问题讨论】:
问题已解决。我们需要从 Application/sonata/ProductBundle/entity/Blow 类中移除 abstract 关键字。 【参考方案1】:你得到同样的错误是因为你可能做同样的错误?查看您的简单实体并注意继承的 Product 类...您将 Product 类定义为抽象类...但是您的 Product 类正在扩展 BaseProduct 类,该类未在您的帖子中显示...
这个继承链对我来说看起来很奇怪。你能检查一下,你的 BaseProduct 也不是抽象的吗?
【讨论】:
以上是关于SonataProductBundle(symfony 2.8)而不是显示产品创建表单,而是出现“没有可用的对象类型”按钮的主要内容,如果未能解决你的问题,请参考以下文章
如何在 LoginListener 中的 onSecurityInteractiveLogin 方法中重定向 - Symfony2