我几天前开始学习Sylius。我需要Symfony 3项目中的电子商务模块。所以我要用Sylius来扩展我的项目,我将使用Core/Components堆栈。Sylius产品定制模型:字段未在表格中显示
- 我开始安装Sylius ProductBundle的(参见http://docs.sylius.org/en/latest/bundles/SyliusProductBundle/installation.html)
看似简单,但在第一,因为作曲家安装的不支持了一个稳定的版本(0.19),没有工作。 ..无论如何,我终于安装了sylius/sylius [email protected]包,所以我composer.json看起来像这样:
"minimum-stability" : "dev",
"prefer-stable" : true,
"require" : {
"php" : "^7.0",
"sylius/sylius" : "^[email protected]",
"friendsofsymfony/user-bundle" : "[email protected]",
"symfony/assetic-bundle" : "^2.8",
"gedmo/doctrine-extensions" : "^2.4"
},
=>第一个问题:这是正确的方式???
- 然后,我在我的项目中创建了一个SyliusBundle,以将整个Sylius配置与我的其余项目分离。
在SyliusBundle /应用/ 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产品型号(很简单)
在OfferBundle /实体/继承我的报价模型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:听起来不错?
- 然后我定制的形式延伸我的优惠形式与Sylius产品形式(参见http://docs.sylius.org/en/latest/customization/form.html)
在OfferBundle /形式/ 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 /表/扩展/ 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 /资源/配置/ services.yml:
offer.form.extension.type.offer:
class: OfferBundle\Form\Extension\OfferTypeExtension
tags:
- { name: form.type_extension, extended_type: OfferBundle\Form\OfferType }
问题3:它的工作原理,但看到Sylius \包\ CoreBundle \表格\延期\ ProductTypeExtension包含如$图像,$ variantSelectionMethod其它附加字段。 ..但它不会以我的形式出现。所以我想在某个地方的service.yml没有加载?
希望有人能帮助我!
Tkank你的答案。 实际上,没有必要,因为Symfony中的表单呈现显示所有未显示的字段,所以它不是关于表单模板。 – Echo