在symfony中使用prepersist

b5lpy0ml  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(278)

嗯,我是symfony的初学者,到目前为止,我开发了一个网站,用户可以注册自己,并在登录后动态创建表单,但我的注册表单没有按预期工作。我的基本想法是,当用户试图注册自己时,预先检查他输入的客户机号码是否已经存在于数据库中,如果不是这样,函数就会抛出一个错误,下面的代码就是我目前所想的,但似乎不起作用。到底是什么问题?

//src/AppBundle/Entity/User.php

    /**
    * @ORM\PrePersist
    * groups={"Registration", "Profile"}
    */
    public function onPrePersist() //orm doctrine
    {
        $data = checkFirma($_POST['clientNr']);
        if(empty($data) || $data = ""){
            throw new Exception("Client Nr is mandatory");
        }
        else{
            $this->company = $data['userid'];
            $this->rolle = $data['rolle'];
        }

    }
    public function checkFirma($clientnr){
        $connection = $em->getConnection();
        $statement = $connection->prepare('SELECT userid, clientNr, rolle FROM companyClient WHERE clientNr = :nr');
        $statement->bindValue('nr', $clientnr);
        $statement->execute();
        $result = $statement->fetchAll('EAGER');
        //return $result
    }
l7wslrjt

l7wslrjt1#

你的方法设计得不太好,因为你违反了关注点分离原则。
您的实体不应该知道任何有关数据库或语句或类似的信息,因为它对此不负责。
从实体中删除该验证部分,然后使用另一个解决方案。
我将创建一个唯一的验证规则,如下所示
https://symfony.com/doc/current/reference/constraints/uniqueentity.html
在控制器中处理这些约束
https://symfony.com/doc/current/validation.html
希望这有帮助

相关问题