小编Ele*_*ero的帖子

Symfony 4处理null DateType表单字段

我在Symfony 4中有一个表单,我将DateType实现为文本字段

->add('DateOfBirth', DateType::class, array(
    'required' => false,
    'widget' => 'single_text',
    'empty_data' =
))
Run Code Online (Sandbox Code Playgroud)

但是该字段是可选的,以填写表单.当我提交该字段的空值时,我收到错误:

期望类型为"DateTimeInterface"的参数,给出"NULL".

错误就行了

$form->handleRequest($request);
Run Code Online (Sandbox Code Playgroud)

看来我需要传入一个默认值(即 - 1/1/1990),因为null不是一个有效的DateTime值?处理这个问题的正确方法是什么?我查看了这个页面并尝试了各种各样的东西(即 - 改变输入类型)但似乎没有什么能解决这个问题.

提前致谢!

我的实体:

<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;
use NoProtocol\Encryption\MySQL\AES\Crypter;

/**
 * @ORM\Entity(repositoryClass="App\Repository\PatientsRepository")
 * @ORM\Table(name="Patients")
 */
class PatientSearch
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="integer")
     */
    private $PatientId;

    /**
     * @ORM\Column(type="string", length=100, nullable=true)
     */
    private $Address1;

    /**
     * @ORM\Column(type="string", length=100, nullable=true)
     */
    private $Address2;

    /**
     * @ORM\Column(type="string", …
Run Code Online (Sandbox Code Playgroud)

forms symfony4

10
推荐指数
4
解决办法
5468
查看次数

Symfony 4 - 使用服务加密/解密学说中使用的字段?

所以我的数据库中有一个实体的字段

class Person
{
    // other fields

    /**
     * @var string
     *
     * @ORM\Column(name="last_name", type="string", length=50, nullable=false)
     */
    private $lastName;

    /**
     * @var string
     *
     * @ORM\Column(name="first_name", type="string", length=50, nullable=false)
     */
    private $firstName;

   // getters and setters
}
Run Code Online (Sandbox Code Playgroud)

我有一个名为 SecureEncryptor 的服务。它具有 Decrypt() 和 Encrypt() 函数 - 基本上你只需将加密/未加密(分别)字符串传递给它,它就会执行相应的操作。

问题是我不确定如何将该服务与实体结合使用 - 特别是在考虑表单(类型)时。我的意思是我知道我可以只获取该字段并调用 Decrypt 函数,但这不适用于绑定到 Person 实体的类型。

我开始为解密的人制作一个单独的实体,然后在处理数据库时我会切换它,但这似乎是错误的。我的另一个想法是从实体调用服务,但我读过这也是错误的。

有任何想法吗?

编辑:

这基本上就是我想要做的:

$builder->get('dateOfBirth')
   ->addModelTransformer(new CallbackTransformer(
       function ($encryptedDOB) {
           return $this->encryptor->decrypt($encryptedDOB, salt); // How do I get the salt value here?
       },
      function ($decryptedDOB) { …
Run Code Online (Sandbox Code Playgroud)

php encryption symfony symfony4

2
推荐指数
2
解决办法
7091
查看次数

Symfony 4必需的TextType = false得到类型为“ string”,“ NULL”的期望参数

我有一个TextType字段,其设置如下

类型:

        ->add('zipCode',TextType::class, array(
                'attr' => array('maxlength' => 10),
                'required' => false,
                'empty_data' => null
            )
        )
Run Code Online (Sandbox Code Playgroud)

从数据库加载数据时,该字段为null。我只是尝试提交表格,然后我得到

预期的参数类型为“字符串”,为“ NULL”。

在vendor / symfony / property-access / PropertyAccessor.php:174处Symfony \ Component \ PropertyAccess \ PropertyAccessor :: throwInvalidArgumentException('传递给App \ Entity \ Patients :: setZipCode()的参数1必须为字符串类型,给定为null ,

我不确定该如何解决?我想将值设为空...吗?也许是因为我没有在表单上加载初始数据?

下面的相关代码,如果您需要其他帮助,请告诉我:

枝条:

{{ form_widget(view_form.zipCode, { 'attr': {'class': 'mb-2 mb-sm-0 w-100'} }) }}
Run Code Online (Sandbox Code Playgroud)

控制器:

public function view(Request $request)
{
    $patientId = $request->query->get('id');

    if (!empty($patientId)) {
        $search = $this->getDoctrine()
            ->getRepository(Patients::class)
            ->find($patientId);

        if (is_null($search))
            $this->addFlash('danger', 'Invalid Patient');

        $form = $this->createForm(PatientViewType::class,$search); …
Run Code Online (Sandbox Code Playgroud)

php validation symfony4

1
推荐指数
1
解决办法
2258
查看次数

标签 统计

symfony4 ×3

php ×2

encryption ×1

forms ×1

symfony ×1

validation ×1