Symfony 验证器注释 returns "annotation was never imported exception"
Annotation for Symfony validator returns "annotation was never imported exception"
我正在尝试在 Symfony 控制器上使用验证器服务,特别是 uniqueEntity
约束来检查数据库中是否已经存在具有相同 ID 的对象。我之前在同一个项目上成功地使用了验证器的 de UUID
约束,也使用了注释。出于这个原因,使用相同的方法不起作用似乎很奇怪。
我的注释实体如下所示:
<?php
//src/Entity/Usuarios.php
namespace App\Entity;
use App\Repository\UsuariosRepository;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\Entity(repositoryClass=UsuariosRepository::class)
* @UniqueEntity("idUsuario")
*/
class Usuarios
{
/**
* @ORM\Id() @ORM\Column(name="idUsuario",type="integer", unique=true)
* @Assert\IdUsuario
*/
private $idUsuario;
\** etc.**\
?>
我的控制器看起来像这样:
//src/Entity/Usuarios.php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpClient\HttpClient;
use Doctrine\ORM\EntityManagerInterface;
use App\Entity\Empleados;
use App\Entity\Productos;
use App\Entity\ProductoOrden;
use App\Entity\Ordenes;
use App\Entity\Usuarios;
use App\Entity\Ventas;
use App\Entity\Periodos;
require_once('/Users/jaumaf/clases/2020-1/incentivos/src/testData.php');
use const testData\USUARIOS_T;
use const testData\EMPLEADOS_T;
use const testData\PRODUCTOS_T;
use const testData\ORDENES_T;
use const testData\PERIODOS_T;
use const testData\VENTAS_T;
use Psr\Log\LoggerInterface;
use Symfony\Component\Validator\Validator\ValidatorInterface;
class LoadDataController extends AbstractController
{
/**
* @Route("/load/data", name="load_data")
*/
public function index(LoggerInterface $logger, ValidatorInterface $validator) {
//los json estan en testData.php
$usuariosArray = json_decode(USUARIOS_T, TRUE);
$empleadosArray = json_decode(EMPLEADOS_T,TRUE);
$productosArray = json_decode(PRODUCTOS_T,TRUE);
$ordenesPorEmpleadoArray = json_decode(ORDENES_T,TRUE);
$periodosArray = json_decode(PERIODOS_T, TRUE);
$ventasPorVendedorArray= json_decode(VENTAS_T, TRUE);
$logger->info('Test constants loaded');
$entities = $this -> mapArraysToObjects($usuariosArray, $empleadosArray, $productosArray, $ordenesPorEmpleadoArray,$ventasPorVendedorArray,$periodosArray);
$logger->info('Entities loaded to memory');
$cont = 0;
$logtable = $this -> logLoadedEntities($cont, $entities);
// Persistencia
$entityManager = $this->getDoctrine()->getManager();
$logger->info('ORM loaded');
// Validator test
$usuario = $entities[0];
$validation = $validator -> validate($usuario);
// this should make the validator throw a uniqueEntity exception, but it throws an annotation exception.
我遇到的异常是:
[Semantical Error] The annotation "@Symfony\Component\Validator\Constraints\IdUsuario" in property App\Entity\Usuarios::$idUsuario was never imported. Did you maybe forget to add a "use" statement for this annotation?
我已经尝试在我的控制器上为 Symfony\Component\Validator\Constraints\IdUsuario
添加一个 use
语句,因为异常消息似乎暗示了这一点(但是,Symfony 指南没有提到这一步,所以它应该是不必要的) .但它显示完全相同的错误。
我也尝试进行学说迁移,希望注释使用的元数据以某种方式自我更新,但它在命令行中抛出相同的异常。
bash-3.2$ php bin/console make:migration
In AnnotationException.php line 54:
[Semantical Error] The annotation "@Symfony\Component\Validator\Constraints\IdUsu
ario" in property App\Entity\Usuarios::$idUsuario was never imported. Did you may
be forget to add a "use" statement for this annotation?
我是 php 的新手,我不太了解注释的工作原理。但我已按照 https://symfony.com/doc/current/reference/constraints/UniqueEntity.html
中的指南进行操作。我很确定我已经彻底复习了语法,正如我所说的那样,它以前在不同的约束条件下工作。此外,当我调用 validate()
函数时,从控制器内部抛出异常。也许我在控制器端或 Symfony 框架系统中缺少某些我不知道的东西可能会影响验证服务的行为?
如有任何指导,我将不胜感激。与此同时,我将尝试将注意力集中在注释上。
谢谢
从 class Usuarios
中删除注释 @Assert\IdUsuario
您是从 https://symfony.com/doc/current/reference/constraints/UniqueEntity.html 复制粘贴的
它与 UniqueEntity 验证无关。它只是检查该字段是否是有效的电子邮件。
我正在尝试在 Symfony 控制器上使用验证器服务,特别是 uniqueEntity
约束来检查数据库中是否已经存在具有相同 ID 的对象。我之前在同一个项目上成功地使用了验证器的 de UUID
约束,也使用了注释。出于这个原因,使用相同的方法不起作用似乎很奇怪。
我的注释实体如下所示:
<?php
//src/Entity/Usuarios.php
namespace App\Entity;
use App\Repository\UsuariosRepository;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\Entity(repositoryClass=UsuariosRepository::class)
* @UniqueEntity("idUsuario")
*/
class Usuarios
{
/**
* @ORM\Id() @ORM\Column(name="idUsuario",type="integer", unique=true)
* @Assert\IdUsuario
*/
private $idUsuario;
\** etc.**\
?>
我的控制器看起来像这样:
//src/Entity/Usuarios.php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpClient\HttpClient;
use Doctrine\ORM\EntityManagerInterface;
use App\Entity\Empleados;
use App\Entity\Productos;
use App\Entity\ProductoOrden;
use App\Entity\Ordenes;
use App\Entity\Usuarios;
use App\Entity\Ventas;
use App\Entity\Periodos;
require_once('/Users/jaumaf/clases/2020-1/incentivos/src/testData.php');
use const testData\USUARIOS_T;
use const testData\EMPLEADOS_T;
use const testData\PRODUCTOS_T;
use const testData\ORDENES_T;
use const testData\PERIODOS_T;
use const testData\VENTAS_T;
use Psr\Log\LoggerInterface;
use Symfony\Component\Validator\Validator\ValidatorInterface;
class LoadDataController extends AbstractController
{
/**
* @Route("/load/data", name="load_data")
*/
public function index(LoggerInterface $logger, ValidatorInterface $validator) {
//los json estan en testData.php
$usuariosArray = json_decode(USUARIOS_T, TRUE);
$empleadosArray = json_decode(EMPLEADOS_T,TRUE);
$productosArray = json_decode(PRODUCTOS_T,TRUE);
$ordenesPorEmpleadoArray = json_decode(ORDENES_T,TRUE);
$periodosArray = json_decode(PERIODOS_T, TRUE);
$ventasPorVendedorArray= json_decode(VENTAS_T, TRUE);
$logger->info('Test constants loaded');
$entities = $this -> mapArraysToObjects($usuariosArray, $empleadosArray, $productosArray, $ordenesPorEmpleadoArray,$ventasPorVendedorArray,$periodosArray);
$logger->info('Entities loaded to memory');
$cont = 0;
$logtable = $this -> logLoadedEntities($cont, $entities);
// Persistencia
$entityManager = $this->getDoctrine()->getManager();
$logger->info('ORM loaded');
// Validator test
$usuario = $entities[0];
$validation = $validator -> validate($usuario);
// this should make the validator throw a uniqueEntity exception, but it throws an annotation exception.
我遇到的异常是:
[Semantical Error] The annotation "@Symfony\Component\Validator\Constraints\IdUsuario" in property App\Entity\Usuarios::$idUsuario was never imported. Did you maybe forget to add a "use" statement for this annotation?
我已经尝试在我的控制器上为 Symfony\Component\Validator\Constraints\IdUsuario
添加一个 use
语句,因为异常消息似乎暗示了这一点(但是,Symfony 指南没有提到这一步,所以它应该是不必要的) .但它显示完全相同的错误。
我也尝试进行学说迁移,希望注释使用的元数据以某种方式自我更新,但它在命令行中抛出相同的异常。
bash-3.2$ php bin/console make:migration
In AnnotationException.php line 54:
[Semantical Error] The annotation "@Symfony\Component\Validator\Constraints\IdUsu
ario" in property App\Entity\Usuarios::$idUsuario was never imported. Did you may
be forget to add a "use" statement for this annotation?
我是 php 的新手,我不太了解注释的工作原理。但我已按照 https://symfony.com/doc/current/reference/constraints/UniqueEntity.html
中的指南进行操作。我很确定我已经彻底复习了语法,正如我所说的那样,它以前在不同的约束条件下工作。此外,当我调用 validate()
函数时,从控制器内部抛出异常。也许我在控制器端或 Symfony 框架系统中缺少某些我不知道的东西可能会影响验证服务的行为?
如有任何指导,我将不胜感激。与此同时,我将尝试将注意力集中在注释上。
谢谢
从 class Usuarios
@Assert\IdUsuario
您是从 https://symfony.com/doc/current/reference/constraints/UniqueEntity.html 复制粘贴的 它与 UniqueEntity 验证无关。它只是检查该字段是否是有效的电子邮件。