Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony 3.0:如何知道条目何时成功插入?_Php_Doctrine_Symfony - Fatal编程技术网

Php Symfony 3.0:如何知道条目何时成功插入?

Php Symfony 3.0:如何知道条目何时成功插入?,php,doctrine,symfony,Php,Doctrine,Symfony,我已在我的Symfony 3.0项目上创建了一个用户实体: <?php namespace AppBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity * @ORM\Table(name="users") * @ORM\Entity(repositoryClass="AppBundle\Entity\UserRepository") */ class Users { /** * @ORM

我已在我的Symfony 3.0项目上创建了一个用户实体:

<?php

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;


/**
 * @ORM\Entity
 * @ORM\Table(name="users")
 * @ORM\Entity(repositoryClass="AppBundle\Entity\UserRepository")
 */
class Users
{
  /**
   * @ORM\Column(type="string", length=60)
   * @ORM\Id
   * @ORM\GeneratedValue(strategy="CUSTOM")
   * @ORM\CustomIdGenerator(class="AppBundle\Doctrine\AutoIdGenerate")
   */
  private $id;

  /**
   * @ORM\Column(type="string", length=15)
   */
  private $username;

  /**
   * @ORM\Column(type="string", length=30)
   */
  private $password;

  /**
   * @ORM\Column(type="string", length=60)
   * @ORM\GeneratedValue(strategy="CUSTOM")
   * @ORM\CustomIdGenerator(class="AppBundle\Doctrine\AutoIdGenerate")
   */
  private $token;

  /**
   * @ORM\Column(type="boolean")
   */
  private $activated;

    /**
     * Get id
     *
     * @return string
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set username
     *
     * @param string $username
     *
     * @return Users
     */
    public function setUsername($username)
    {
        $this->username = strip_tags($username);

        return $this;
    }

    /**
     * Get username
     *
     * @return string
     */
    public function getUsername()
    {
        return $this->username;
    }

    /**
     * Set password
     *
     * @param string $password
     *
     * @return Users
     */
    public function setPassword($password)
    {
      $options = ['cost' => 42];
      $this->password = password_hash ($password,CRYPT_BLOWFISH,$options);

      return $this;
    }

    /**
     * Get password
     *
     * @return string
     */
    public function getPassword()
    {
        return $this->password;
    }

    /**
     * Set token
     *
     * @param string $token
     *
     * @return Users
     */
    public function setToken($token)
    {
        $this->token = $token;

        return $this;
    }

    /**
     * Get token
     *
     * @return string
     */
    public function getToken()
    {
        return $this->token;
    }

    /**
     * Set activated
     *
     * @param boolean $activated
     *
     * @return Users
     */
    public function setActivated($activated)
    {
        $this->activated = $activated;

        return $this;
    }

    /**
     * Get activated
     *
     * @return boolean
     */
    public function getActivated()
    {
        return $this->activated;
    }

}

如果您的输入正确插入,您将不会有任何错误。
否则,您将有一个错误(除非您有一个不是来自插入的错误)

要捕获可能的错误,可以执行以下操作:

// ...
$em->persist($user);
try {
    $em->flush();
     // Success 
} catch (\Exception $e) {
    $result['data'] = $e->getMessage(); // The exact message of the exception thrown during INSERT
    // Error
}

否则,可以考虑条目已被存储。


对于自动生成的字段,在调用
$em->flush()

后,可以通过getter立即使用这些字段。您可以为Doctrine
postFlush
事件注册事件侦听器

示例侦听器:

<?php
use Doctrine\ORM\Event\PostFlushEventArgs;

class PostFlushExampleListener
{
    public function postFlush(PostFlushEventArgs $args)
    {
        // ...
    }
}
Symfony文档:

条令文件:


在调用
flush
action之后,所有自动生成的字段应该都可用。在您的情况下,条令事件是非强制性的。我只是假设在刷新之后,我将拥有所有需要的数据,并且数据将被设置在数据库中

@Dimitrosdesylas为什么不接受?你的问题没有解决吗?
<?php
use Doctrine\ORM\Event\PostFlushEventArgs;

class PostFlushExampleListener
{
    public function postFlush(PostFlushEventArgs $args)
    {
        // ...
    }
}
services:
    my.listener:
        class: PostFlushExampleListener
        tags:
            - { name: doctrine.event_listener, event: postFlush }