簡體   English   中英

Sylius產品定制模型:表單中未顯示字段

[英]Sylius Product customized model : fields not showed in form

我幾天前開始學習Sylius。 我在Symfony 3項目中需要一個電子商務模塊。 因此,我將使用Sylius擴展我的項目,我只使用Core / Components堆棧。

  1. 我從安裝Sylius ProductBundle開始(請參閱http://docs.sylius.org/en/latest/bundles/SyliusProductBundle/installation.html

看起來很簡單,但起初沒有起作用,因為Composer安裝了一個不再受支持的穩定版本(0.19)...無論如何,我終於安裝了sylius / sylius ~1.0@dev軟件包,因此我的composer.json看起來像這樣:

"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中:

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產品模型繼承的Offer模型(非常簡單)

在OfferBundle / Entity / Offer.php中:

<?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. 然后,我自定義表單,將Sylius產品表單擴展了我的“報價”表單(請參閱http://docs.sylius.org/en/latest/customization/form.html

在OfferBundle / Form / OfferType.php中:

<?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中:

<?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中:

offer.form.extension.type.offer:
        class: OfferBundle\Form\Extension\OfferTypeExtension
        tags:
            - { name: form.type_extension, extended_type: OfferBundle\Form\OfferType }

問題3:可以看到Sylius \\ Bundle \\ CoreBundle \\ Form \\ Extension \\ ProductTypeExtension包含$ images,$ variantSelectionMethod之類的附加字段,但是它沒有出現在我的表單中。 所以我想某個地方的service.yml沒有被加載?

希望有人可以幫助我!

我認為問題是因為您已經覆蓋了表單,而沒有擴展它。 因此,您只能看到您的表單字段,而看不到“產品”表單字段(因為不再使用此表單)。 如果要對“產品”表單進行一些更改,則只需進行表單擴展即可修改現有的“產品”表單。

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

希望這可以幫助 ! :)

您可能還需要覆蓋表單模板才能顯示那些添加的字段。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM