Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony可选电话输入验证完整性错误:列';电话';不能为空_Php_Symfony_Symfony 3.4 - Fatal编程技术网

Php Symfony可选电话输入验证完整性错误:列';电话';不能为空

Php Symfony可选电话输入验证完整性错误:列';电话';不能为空,php,symfony,symfony-3.4,Php,Symfony,Symfony 3.4,我拥有以下实体: namespace AppBundle\Entity; use Doctrine\ORM\Mapping as ORM; use FOS\UserBundle\Model\User as BaseUser; use Symfony\Component\Validator\Constraints as Assert; use Misd\PhoneNumberBundle\Validator\Constraints\PhoneNumber as AssertPhoneNumber

我拥有以下实体:

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use FOS\UserBundle\Model\User as BaseUser;
use Symfony\Component\Validator\Constraints as Assert;
use Misd\PhoneNumberBundle\Validator\Constraints\PhoneNumber as AssertPhoneNumber;

/**
 * @ORM\Entity
 * @ORM\Table(name="users")
 */
class User extends BaseUser
{
    /**
     * @ORM\Column(type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\Column(type="string", length=25)
     * @Assert\NotBlank(message="Please enter your name.", groups={"Registration", "Profile"})
     * @Assert\Length(
     *     min=3,
     *     max=25,
     *     minMessage="The name is too short.",
     *     maxMessage="The name is too long.",
     *     groups={"Registration", "Profile"}
     * )
     */
    protected $name;

    /**
     * @ORM\Column(type="string", length=25)
     * @Assert\NotBlank(message="Please enter your name.", groups={"Registration", "Profile"})
     * @Assert\Length(
     *     min=3,
     *     max=25,
     *     minMessage="The surname is too short.",
     *     maxMessage="The surname is too long.",
     *     groups={"Registration", "Profile"}
     * )
     */
    protected $surname;

    /**
     * @ORM\Column(type="phone_number")
     * @AssertPhoneNumber
     */
    protected $phone;

    /**
     * @ORM\Column(type="string", length=255)
     * @Assert\Length(
     *     min=0,
     *     max=255,
     *     groups={"Registration", "Profile"}
     * )
     */
    protected $organization;

    /**
     * @ORM\Column(type="string", length=255)
     * @Assert\Length(
     *     min=0,
     *     max=255,
     *     groups={"Registration", "Profile"}
     * )
     */
    protected $occupation;

    public function __construct()
    {
        parent::__construct();
    }

    public function setName(string $name)
    {
      $this->name=$name;

      return $this;
    }

    public function getName()
    {
        return $this->name;
    }


    public function setSurname(string $surname)
    {
      $this->surname=$surname;

      return $this;
    }

    public function getSurname()
    {
        return $this->name;
    }

    public function setPhone($phoneNum)
    {
      $this->phone=$phoneNum;
      return $this;
    }

    public function getPhone()
    {
      return $this->phone;
    }

    public function setOrganization($organization)
    {
      $this->organization=$organization;
      return $this;
    }

    public function getOrganization()
    {
      return $this->organization;
    }

    public function setOccupation($occupation)
    {
      $this->occupation=$occupation;
      return $this;
    }

    public function getOccupation()
    {
      return $this->occupation;
    }
}
如您所见,它有一个名为
$phone
的字段:

/**
 * @ORM\Column(type="phone_number")
 * @AssertPhoneNumber
 */
protected $phone;
按照我的逻辑,该字段应该是可选的,不需要注册,因此为了做到这一点,我相应地扩展了FosUserBundle表单:

namespace AppBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Misd\PhoneNumberBundle\Form\Type\PhoneNumberType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;


class RegistrationType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('name',TextType::class,["label"=>"register.name","required"=>true,'translation_domain' => 'FOSUserBundle'])
                ->add('surname',TextType::class,["label"=>"register.surname","required"=>true,'translation_domain' => 'FOSUserBundle'])
                ->add('phone',PhoneNumberType::class,["label"=>"register.phonenum",'translation_domain' => 'FOSUserBundle'])
                ->add('organization',TextType::class,["label"=>"register.organization","required"=>false,'translation_domain' => 'FOSUserBundle'])
                ->add('occupation',TextType::class,["label"=>"register.position","required"=>false,'translation_domain' => 'FOSUserBundle']);
    }

    public function getParent()
    {
        return 'FOS\UserBundle\Form\Type\RegistrationFormType';
    }

    public function getBlockPrefix()
    {
        return 'app_user_registration';
    }

    // For Symfony 2.x
    public function getName()
    {
        return $this->getBlockPrefix();
    }
}
如您所见,我将其设置为NotRequired,如您在以下代码段中所见:

->add('phone',PhoneNumberType::class,["label"=>"register.phonenum",'translation_domain' => 'FOSUserBundle'])
但是,当我尝试测试注册时,会出现以下错误:

SQLSTATE[23000]:完整性约束冲突:1048列“phone”不能为null

为了避免此类错误,我还将定义更改为:

/**
 * @ORM\Column(type="phone_number")
 */
protected $phone;
但我仍然得到了错误。是一种将字段设置为null的方法吗

同样为了验证,我使用了php的
giggsey/libphonenumber
coposer包

/**
* @ORM\Column(type="phone_number", nullable=true)
* @AssertPhoneNumber
*/
protected $phone;

我相信这会奏效

条令注释中缺少一个参数:

/**
 * @ORM\Column(type="phone_number", nullable=true)
 * @AssertPhoneNumber
 */
protected $phone;
不要忘记运行
d:s:u--dump sql |--force
或生成迁移;)