在我的网站上,使用移动电话执行身份验证。电话由两部分组成:代码和号码("+7(代码)号码")。它是通过继承的表单字段类型实现的:
电话类型.php
class PhoneType extends TextType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('code', 'text')->add('number', 'text')
->addModelTransformer(new PhoneToStringTransformer());
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array('compound' => true));
}
}
电话到字符串变压器.php
class PhoneToStringTransformer implements DataTransformerInterface
{
public function transform($string)
{
if (!empty($string) && !preg_match('/^'+7'd{10}$/', $string)) {
throw new TransformationFailedException('Incorrect phone format');
}
return array(
'code' => substr($string, 2, 3),
'number' => substr($string, 5));
}
public function reverseTransform($phone)
{
return sprintf('+7%s%s', $phone['code'], $phone['number']);
}
}
但是当我尝试进行身份验证时,我有以下警告:
警告:trim() 期望参数 1 为字符串,数组在 ''path''to''project''vendor''symfony''symfony''src''Symfony''Component''Security''Http''Firewall''UsernamePasswordFormAuthenticationListener.php第 79 行
出现警告的原因是它需要用户名作为字符串,但登录表单返回值是一个数组。
如何使用非标准的"用户名"(我的手机作为阵列)进行身份验证?
我使用标准安全捆绑包。
app/config/security.yml
providers:
main:
entity: { class: MyProject:User, property: phone }
firewalls:
main:
form_login:
username_parameter: userForm[phone]
我不知道,如何指定username_parameter以将其作为字符串userForm[phone][code] + userForm[phone][number]
传递给用户名密码表单身份验证侦听器。
确保您的 yml 文件正确缩进。您使用的格式应该userForm[phone]
,因为我刚刚通过写出这样的参数遇到了类似的问题。
Symfony2,表单,username_parameter和防火墙参数