首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sylius产品定制模型:字段未以形式显示

Sylius产品定制模型:字段未以形式显示
EN

Stack Overflow用户
提问于 2017-03-27 13:30:58
回答 2查看 1.3K关注 0票数 2

几天前我开始学习西里厄斯。我需要一个电子商务模块在我的Symfony 3项目。所以我将用Sylius扩展我的项目,我将只使用Core/Components堆栈。

  1. 我首先开始安装Sylius ProductBundle (cf )。http://docs.sylius.org/en/latest/bundles/SyliusProductBundle/installation.html)

看起来很简单,但一开始不起作用,因为Composer安装了一个不再支持的稳定版本(0.19) .总之,我终于安装了sylius/sylius ~1.0@dev包,所以我的composer.json看起来是这样的:

代码语言:javascript
复制
"minimum-stability" : "dev",
"prefer-stable" : true,
"require" : {
    "php" : "^7.0",
    "sylius/sylius" : "^1.0@beta",
    "friendsofsymfony/user-bundle" : "~2.0@dev",
    "symfony/assetic-bundle" : "^2.8",
    "gedmo/doctrine-extensions" : "^2.4"
},

=>第一个问题:这是正确的方式吗?

  1. 然后,我在项目中创建了一个SyliusBundle,以将整个Sylius配置与项目的其余部分分离开来。

在SyliusBundle/app/config.yml中:

代码语言:javascript
复制
imports:
    - { resource: "@SyliusProductBundle/Resources/config/app/config.yml" }

# Doctrine
stof_doctrine_extensions:
    default_locale: "%locale%"
    orm:
        default:
            tree: true
            sluggable: true
            timestampable: true
            loggable: false
            sortable: true

# Product
sylius_product:
    driver: doctrine/orm
    resources:
        product:
            classes:
                model: OfferBundle\Entity\Offer
                repository: OfferBundle\Entity\OfferRepository
                form: OfferBundle\Form\OfferType

我遵循Sylius准则定制了从Sylius产品模型继承下来的报价模型(非常简单)

在OfferBundle/Entity/Offer.php中:

代码语言:javascript
复制
<?php
namespace OfferBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Sylius\Component\Core\Model\Product as BaseProduct;


/**
 * @ORM\Table(name="offer")
 * @ORM\Entity(repositoryClass="OfferRepository")
 */
class Offer extends BaseProduct
{

=>问题2:听起来不错吗?

  1. 然后,我用(cf )定制了这个表单,扩展了我的报价表单。http://docs.sylius.org/en/latest/customization/form.html)

在OfferBundle/Form/OfferType.php中:

代码语言:javascript
复制
<?php

namespace OfferBundle\Form;

use Symfony\Component\OptionsResolver\OptionsResolver;
use OfferBundle\Entity\Offer;
use Symfony\Component\Form\AbstractType;


class OfferType extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(['data_class' => Offer::class]);
    }


    /**
     * {@inheritdoc}
     */
    public function getBlockPrefix()
    {
        return 'offer';
    }


    /**
     * {@inheritdoc}
     */
    public function getParent()
    {
        return \Sylius\Bundle\ProductBundle\Form\Type\ProductType::class;
    }
}

在OfferBundle/Form/Extension/OfferTypeExtension.php中:

代码语言:javascript
复制
<?php

namespace OfferBundle\Form\Extension;

use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use AppBundle\Form\Type\WysiwygType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use OfferBundle\Form\Type\TagsType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Doctrine\ORM\EntityRepository;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use OfferBundle\Entity\Offer;
use MediaBundle\Form\MediaFileType;
use MediaBundle\Form\MediaVideoType;
use CompanyBundle\Entity\Company;
use Tetranz\Select2EntityBundle\Form\Type\Select2EntityType;
use Admin\CompanyBundle\Controller\CompanyController;
use Symfony\Component\Form\AbstractTypeExtension;
use OfferBundle\Form\ContactType;
use OfferBundle\Form\PriceType;
use OfferBundle\Form\OfferType;


final class OfferTypeExtension extends AbstractTypeExtension
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('advantage', WysiwygType::class)
            ->add('ecommerce')
            ->add('enabled')
            ->add('bestseller')
            ->add('company', Select2EntityType::class, [
                'multiple' => false,
                'remote_route' => 'admin_company_company_autocomplete',
                'class' => Company::class,
                'primary_key' => 'id',
                'text_property' => 'name',
                'minimum_input_length' => 0,
                'page_limit' => CompanyController::NB_PER_PAGE,
                'allow_clear' => false,
                'delay' => 250,
                'cache' => false,
                'cache_timeout' => 60000,
                'language' => 'fr',
                'placeholder' => 'form.choose',
                'required' => true,
            ])
            ->add('state', ChoiceType::class, [
                'choices' => Offer::getStates(),
                'placeholder' => 'form.choose',
            ])
...

并通过服务加载表单扩展。在OfferBundle/Resources/config/services.yml中:

代码语言:javascript
复制
offer.form.extension.type.offer:
        class: OfferBundle\Form\Extension\OfferTypeExtension
        tags:
            - { name: form.type_extension, extended_type: OfferBundle\Form\OfferType }

Sylius\Bundle\CoreBundle\Form\Extension\ProductTypeExtension问题3:它可以工作,但在查看包含附加字段,如$images、$variantSelectionMethod.但它不是以我的形式出现的。所以我想某个地方的service.yml没有加载?

希望有人能帮我这个忙!

EN

回答 2

Stack Overflow用户

发布于 2017-03-29 08:17:15

我认为问题是因为您已经重写了表单,而不是扩展它。因此,您只看到您的表单字段,而不是Product字段(因为此表单不再使用)。如果希望对Product进行一些更改,则只需进行表单扩展即可修改现有的Product。

http://docs.sylius.org/en/latest/customization/form.html

希望这会有帮助!)

票数 0
EN

Stack Overflow用户

发布于 2017-03-29 09:39:25

您还可能需要重写表单的模板,以显示这些添加的字段。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43047851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档