Symfony2-Misd phonnumberbundle:无法转换属性路径的值;电话号码:应为\libphonenumber\PhoneNumber
下面是我的实体、表单和DBAL配置,用于misd phonenumberbundle与Symfony2.8集成。但我仍然得到下面的错误,有人能让我知道如何解决这个问题吗?我写了几行代码将字符串转换为PhoneNumber obj,然后表单可以正常加载,但我的问题是我们需要显式转换吗?这不是自动处理的吗 实体条目:Symfony2-Misd phonnumberbundle:无法转换属性路径的值;电话号码:应为\libphonenumber\PhoneNumber,symfony,Symfony,下面是我的实体、表单和DBAL配置,用于misd phonenumberbundle与Symfony2.8集成。但我仍然得到下面的错误,有人能让我知道如何解决这个问题吗?我写了几行代码将字符串转换为PhoneNumber obj,然后表单可以正常加载,但我的问题是我们需要显式转换吗?这不是自动处理的吗 实体条目: /** * @ORM\Column(type="phone_number", nullable=true) * @AssertPhoneNumber(defaultRegion="US
/**
* @ORM\Column(type="phone_number", nullable=true)
* @AssertPhoneNumber(defaultRegion="US", message="Please specify a valid phone number")
*/
private $phoneNumber;
doctrine:
dbal:
types:
phone_number: Misd\PhoneNumberBundle\Doctrine\DBAL\Types\PhoneNumberType
->add('phoneNumber', PhoneNumberType::class, array('default_region' => 'US', 'format' => PhoneNumberFormat::NATIONAL, 'required' => false))
DBAL映射:
/**
* @ORM\Column(type="phone_number", nullable=true)
* @AssertPhoneNumber(defaultRegion="US", message="Please specify a valid phone number")
*/
private $phoneNumber;
doctrine:
dbal:
types:
phone_number: Misd\PhoneNumberBundle\Doctrine\DBAL\Types\PhoneNumberType
->add('phoneNumber', PhoneNumberType::class, array('default_region' => 'US', 'format' => PhoneNumberFormat::NATIONAL, 'required' => false))
表格:
/**
* @ORM\Column(type="phone_number", nullable=true)
* @AssertPhoneNumber(defaultRegion="US", message="Please specify a valid phone number")
*/
private $phoneNumber;
doctrine:
dbal:
types:
phone_number: Misd\PhoneNumberBundle\Doctrine\DBAL\Types\PhoneNumberType
->add('phoneNumber', PhoneNumberType::class, array('default_region' => 'US', 'format' => PhoneNumberFormat::NATIONAL, 'required' => false))
处理错误的自定义代码:
if($user->getphoneNumber()!="")
{
$util = $this->container->get('libphonenumber.phone_number_util');
$phoneNUmber = $util->parse($user->getphoneNumber(), "US");
$user->setphoneNumber($phoneNUmber);
}
else
{
$phoneNUmber = new \libphonenumber\PhoneNumber;
$user->setphoneNumber($phoneNUmber);
}
Error:
未捕获的PHP异常Symfony\Component\Form\Exception\TransformationFailedException:无法转换属性路径“phone\u number”的值:webapp/vendor/Symfony/Symfony/Symfony/src/Symfony/Component/Form/Form.PHP第1149行应为\libphonenumber\PhoneNumber
下面是我的解决方案。我没有在app/config.yml中进行任何类型的原则映射 此解决方案假定在AppKernel.php中注册了MisdPhonenumber包
数据转换器类
<?php
namespace Example\Bundle\Form\DataTransformer;
use libphonenumber\PhoneNumber;
use libphonenumber\PhoneNumberFormat;
use Symfony\Component\Form\DataTransformerInterface;
class StringToPhoneNumberTransformer implements DataTransformerInterface
{
// The 'libphonenumber.phone_number_util' service
private $phoneNumberUtil; public function __construct($util)
{
$this->phoneNumberUtil = $util;
}
/**
* Transforms a string (number) to an object (PhoneNumber)
*
* @param string $phoneNumberString
* @return PhoneNumber
*/
public function transform($phoneNumberString)
{
if ($phoneNumberString != "")
{
return $this->phoneNumberUtil->parse($phoneNumberString, "US");
}
return new PhoneNumber;
}
/**
* Transforms a string (number) to an object (issue).
*
* @param PhoneNumber $phoneNumberObject
* @return string
*/
public function reverseTransform($phoneNumberObject)
{
if ($phoneNumberObject != null)
{
return $this->phoneNumberUtil->format($phoneNumberObject, PhoneNumberFormat::NATIONAL);
}
return '';
}
}
表单类型即服务
# src/Example/Bundle/Resources/config/services.yml
services:
example.form.contactinfo:
class: Example\Bundle\Form\Type\User\ContactInfoType
arguments: ["@libphonenumber.phone_number_util"]
tags:
- { name: form.type }
您可能需要使用转换器(请参阅官方SF2文档以获取解释:)。这个包可能附带了一个。顺便说一下,看看包的自述,表单字段是文本字段:谢谢@thoroc。我通过使用Symfony DataTransformer component.Nice修复了这个问题。现在,您可以添加此问题的答案和解决方案。:)谢谢你@Dhananjay!您的代码示例允许我更正错误并成功地将PhoneNumber添加到表单中。然而,我并没有像
symfonyv3.4
withFlex
那样将表单类型添加为服务,它们是自动处理的。