daften/addressing-bundle

提供 commerceguys 地址包和 Symfony 之间的集成。

2.0.1 2024-01-15 23:34 UTC

This package is auto-updated.

Last update: 2024-09-02 09:20:46 UTC


README

Build Status Maintainability

需求

  • jQuery 作为 $ 加载
  • jQuery 一次性正确加载。

安装

将映射添加到您的 doctrine.yaml 文件中

doctrine:
    ...
    orm:
        ...
        entity_managers:
            default:
                ...
                mappings:
                    AddressingBundle:
                        is_bundle: true

待办事项:解释为什么需要此映射。

您还需要根据使用的地址信息表单添加一些配置或 JavaScript。为此,您需要运行 bin/console assets:install 将包资源复制到公共文件夹。

AddressEmbeddableType

您还需要添加一些 JavaScript 代码,以确保国家代码更改时表单可以更新。

下面的脚本提供了一个示例。您只需要初始化 JavaScript 功能。所有地址字段将自动覆盖。此功能仅在使用 Symfony 4 和 Webpack Encore 时有效。

var countryCodeChange = require('../../public/bundles/addressing/js/countryCodeChange');
countryCodeChange.initialize();

AddressEmbeddableGmapsAutocompleteType

您还需要添加一些 JavaScript 代码,以确保自动完成功能可以工作。

下面的脚本提供了一个示例。您只需要初始化 JavaScript 功能。所有自动完成地址字段将自动覆盖。此功能仅在使用 Symfony 4 和 Webpack Encore 时有效。

var addressGmapsAutocomplete = require('../../public/bundles/addressing/js/addressGmapsAutocomplete');
addressGmapsAutocomplete.initialize();

您还需要将 Google API 密钥添加到 .env 文件中,属性名为 GMAPS_API_KEY。您可以通过覆盖 daften.service.gmaps_autocomplete_service 服务的定义来替换此设置。

用法

实体属性

您需要将地址字段添加为 ORM 内嵌属性。

<?php

namespace App\Entity;

use App\Repository\InstallationAddressRepository;
use Daften\Bundle\AddressingBundle\Entity\AddressEmbeddable;
use Daften\Bundle\AddressingBundle\Validator\Constraints as AddressingBundleAssert;
use Doctrine\ORM\Mapping as ORM;

#[ORM\Entity(repositoryClass: InstallationAddressRepository::class)]
class AddressExample
{

    #[ORM\Embedded(class: AddressEmbeddable::class)]
    #[AddressingBundleAssert\EmbeddedAddressFormatConstraint(fieldOverrides: [
        'addressLine1' => 'required',
        'postalCode' => 'required',
        'locality' => 'required',
        'organization' => 'required',
        'givenName' => 'required',
        'familyName' => 'required',
        'addressLine2' => 'optional',
        'additionalName' => 'hidden',
        'administrativeArea' => 'hidden',
        'dependentLocality' => 'hidden',
        'sortingCode' => 'hidden',
    ])]
    private AddressEmbeddable $address;

    /**
     * AddressExample constructor.
     */
    public function __construct()
    {
        $this->address = new AddressEmbeddable();
    }

    /**
     * @return AddressEmbeddable
     */
    public function getAddress()
    {
        return $this->address;
    }

    /**
     * @param AddressEmbeddable $address
     */
    public function setAddress($address): void
    {
        $this->address = $address;
    }
}

实体表单

AddressEmbeddableType

此表单类型可以使用 3 个额外的选项

  • allowed_countries: 允许在国家下拉菜单中选择的国家。这是一个数组,其中键应该是国家名称,值应该是两位国家代码。
  • preferred_countries: 偏好的国家数组,使用两位国家代码。
  • default_country: 在国家下拉菜单中显示的默认国家。

以下是一个示例表单,对于上述 AddressExample 类,使用默认的 AddressEmbeddableType 和单独的表单字段。

<?php

namespace App\Form;

use App\Entity\AddressExample;
use Daften\Bundle\AddressingBundle\Form\Type\AddressEmbeddableType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

/**
 * Class AddressExampleType
 */
class AddressExampleType extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('address', AddressEmbeddableType::class, [
                 'allowed_countries' => [
                     'United States' => 'US',
                     'United Kingdom' => 'UK',
                     'Belgium' => 'BE',
                 ],
                 'preferred_countries' => ['BE', 'US'],
                 'default_country' => 'US',
             ]);
    }

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

AddressEmbeddableGmapsAutocompleteType

此表单类型可以使用 1 个额外的选项

  • allowed_countries: 允许自动完成的国家的数组。这是一个数组,其中值应该是两位国家代码。

以下是一个示例表单,对于上述 AddressExample 类,使用 AddressEmbeddableGmapsAutocompleteType 和一个自动完成字段。

<?php

namespace App\Form;

use App\Entity\AddressExample;
use Daften\Bundle\AddressingBundle\Form\Type\AddressEmbeddableGmapsAutocompleteType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

/**
 * Class AddressExampleType2
 */
class AddressExampleType2 extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
             ->add('address', AddressEmbeddableGmapsAutocompleteType::class, [
                'label' => 'address',
                'translation_domain' => 'address',
                'allowed_countries' => [
                    'BE',
                    'NL',
                ],
            ]);
    }

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