php - 在 symfony 中使用 PrePersist

标签 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
    }

最佳答案

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

你的实体不应该知道任何关于数据库或语句或类似的原因它不对此负责。

从您的实体中删除验证部分并寻求其他解决方案。

我会像这里一样创建一个独特的验证规则

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

并像这里一样在你的 Controller 中处理这个约束

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

希望对你有帮助

关于php - 在 symfony 中使用 PrePersist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51131741/

相关文章:

symfony - 如何检查 Symfony2 的 Twig 模板引擎中是否存在对象?

javascript - AngularJS PUT 与 Symfony2 PUT 方法。更新不起作用

php - phpinfo 中缺少 mbstring 但在 php.ini 中启用

php - & 符号不通过 url 传递字符串变量

PHP - 如果访问者在过去 x 秒内未访问过 1.php,则拒绝访问者访问 2.php

php - jQuery 只获取最后一行的值

php - 其他时间戳上的 ZF2 内连接

php - 如何在开发模式下启用缓存?

javascript - 为什么 JavaScript 函数执行后会附加查询字符串参数?

php - 将除 id 之外的所有内容移动到另一个表