在Symfony中与PrePersist合作

时间:2018-07-02 08:17:20

标签: php mysql symfony registration

好吧,我是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
    }

1 个答案:

答案 0 :(得分:3)

您的方法设计得不好,因为您违反了关注点分离原则。

您的实体不应该对数据库或语句有任何了解,或类似原因对其不承担任何责任。

从您的实体中删除验证部分,然后寻求另一种解决方案。

我会在这里创建一个唯一的验证规则

https://symfony.com/doc/current/reference/constraints/UniqueEntity.html

并在此处像这样处理控制器中的约束

https://symfony.com/doc/current/validation.html

希望这会有所帮助