duanlaiyin2356
2018-07-02 08:17
浏览 107
已采纳

在symfony中与PrePersist合作

Well, I'm beginner in symfony and so far I developed a website where User can register himself and after login create forms dynamically, but my register form doesn't work as expected. My basic idea is when User tries to register himself, to precheck if the client number he entered already exists in the database, if it's not the case, the function throws an error, the code right below is what I thought so far but it doesn't seem to work. What exactly could be the issue?

//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
    }

图片转代码服务由CSDN问答提供 功能建议

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

  // src / AppBundle / Entity / User.php 
 
 / ** 
 * @ORM \ PrePersist 
 * groups  = {“Registration”,“Profile”} 
 * / 
公共函数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']; 
} 
 
} 
公共函数checkFirma($ clientnr){
 $ connection = $ em-> getConnection(); \  n $ statement = $ connection-> prepare('SELECT userid,clientNr,rolle FROM companyClient WHERE clientNr =:nr'); 
 $ statement-> bindValue('nr',$ clientnr); 
 $ statement-  > execute(); 
 $ result = $ statement-> fetchAll('EAGER'); 
 //返回$ result 
} 
   
 
  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • dongliu8559 2018-07-02 08:45
    已采纳

    Your approach isn't very well designed cause you are violating the separation of concern principle.

    Your entity shouldn't know anything about databases or statements or similar cause its not responsible for that.

    Drop that validation parts from your entity and go for another solution.

    I would create a unique validation rule like here

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

    And handle this constraints in your controller like here

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

    Hope this helps

    已采纳该答案
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题