Symfony4:注释不存在,或者无法自动加载|@AssertNotBlank()|



当我尝试通过以下方式删除数据库模式时:

$ vendor/bin/doctrine orm:schema-tool:drop --force

我不断收到此错误:

In AnnotationException.php line 54:
[Semantical Error] The annotation 
"@SymfonyComponentValidatorConstraints  
NotBlank" in property AppEntityUser::$plainPassword does not exist, 
or could not be auto-loaded. 

这是我的用户.php:

<?php
namespace AppEntity;
use DoctrineORMMapping as ORM;
use SymfonyComponentValidatorConstraints as Assert;
use SymfonyBridgeDoctrineValidatorConstraintsUniqueEntity;
use DoctrineCommonCollectionsArrayCollection;
use SymfonyComponentSecurityCoreUserUserInterface;
use SymfonyComponentSecurityCoreUserAdvancedUserInterface;

/**
* @ORMTable(name="app_users")
* @ORMEntity(repositoryClass="AppRepositoryUserRepository")
*/
class User implements UserInterface, Serializable
{
/**
 * @var int
 *
 * @ORMColumn(name="id", type="integer")
 * @ORMId
 * @ORMGeneratedValue(strategy="AUTO")
 */
protected $id;
/**
 * @ORMColumn(type="string", length=25, unique=true)
 */
private $username;
/**
 * @AssertNotBlank()
 * @AssertLength(max=4096)
 */
private $plainPassword;

/** @ORMColumn(type="string", length=64)
 */
private $password;
/**
 * @ORMColumn(type="string", length=60, unique=true)
 */
private $email;
/**
 * @ORMColumn(name="is_active", type="boolean")
 */
private $isActive;
/** @ORMColumn(type="datetime") * */
protected $created_at;
/** @ORMColumn(type="datetime", nullable=true) * */
protected $last_login;
/**
 * @var Video[]
 * @ORMOneToMany(targetEntity="Video", mappedBy="uploadedBy")
 */
protected $videos;
public function __construct()
{
    $this->isActive = true;
    $this->videos = new ArrayCollection();
}

public function getId()
{
    return $this->id;
}
public function getUsername(): ?string //php7.1
{
    return $this->email;
}
public function getSalt() //Not necessary
{
    return null;
}
public function getPlainPassword()
{
    return $this->plainPassword;
}
public function getPassword()
{
    return $this->password;
}
public function getEmail()
{
    return $this->email;
}
public function getRoles()
{
    return array('ROLE_USER');
}
public function eraseCredentials()
{
}
/** @see Serializable::serialize() */
public function serialize()
{
    return serialize(array(
        $this->id,
        $this->username,
        $this->password,
        $this->isActive,
    ));
}
/** @see Serializable::unserialize() */
public function unserialize($serialized)
{
    list (
        $this->id,
        $this->username,
        $this->password,
        $this->isActive,
    ) = unserialize($serialized);
}
public function getCreatedAt()
{
    return $this->created_at;
}
public function getLastLogin()
{
    return $this->last_login;
}
public function setUsername(string $username) //php7
{
    $this->username = $username;
}
public function setEmail($email)
{
    $this->email = $email;
}
public function setPlainPassword($password)
{
    $this->plainPassword = $password;
}
public function setPassword($password)
{
    $this->password = $password;
}
public function setCreatedAt($created_at)
{
    $this->created_at = $created_at;
}
public function setLastLogin($last_login)
{
    $this->created_at = $last_login;
}
public function addVideo(Video $video)
{
    if (!$this->hasVideo($video)) {
        $this->videos->add($video);
    }
}
public function deleteVideo(Video $video)
{
    if ($this->hasVideo($video)) {
        $this->videos->removeElement($video);
    }
}
public function hasVideo(Video $video)
{
    return $this->videos->contains($video);
}
public function getVideos()
{
    return $this->videos;
}
public function isAccountNonExpired()
{
    return true;
}
public function isAccountNonLocked()
{
    return true;
}
public function isCredentialsNonExpired()
{
    return true;
}
public function isEnabled()
{
    return $this->isActive;
}
}

我试图以这种方式解决问题:

Symfony4:注释不存在,或者无法自动加载(Symfony\Component\Validator\Constraint(

这意味着我已经安装了"symfony/validator":"^4.0"。但是它没有任何工作吗?

您这边的问题是因为您缺少一个包,它注册了需要加载的注释。

因此,您可以安装以下软件包:

symfony/phpunit-bridge

在设置方法中添加以下内容:

$autoloader = require __DIR__ . '/your_folder_path/vendor/autoload.php';
AnnotationRegistry::registerLoader([$autoloader, 'loadClass']);

检查 FrameworkBundle 配置("framework"( 验证批注已启用。在配置文件 config/packages/framework.yaml 中,验证下enable_annotations的选项正确设置为 true(dafault 为 false(

例如:

framework:
    secret: '%env(APP_SECRET)%'
    validation:      { enable_annotations: true }

希望这个帮助

相关内容

  • 没有找到相关文章