【发布时间】:2019-01-22 19:13:57
【问题描述】:
我正在为管理员注册准备 Symfony 4.2 表单。我的 Admin 实体与 City 实体具有一对一的双向关系。当他提供的城市已经绑定到现有管理员时,我想向用户提供一条错误消息。首先,我尝试使用与防止其他实体重复电子邮件相同的方法。我在两个实体中都放置了 UniqueEntity 约束,并在模板中为表单错误放置了一个空间。
Admin.php
/**
* @ORM\Entity(repositoryClass="App\Repository\AdminRepository")
* * @UniqueEntity(
* fields={"city"},
* message="error message here"
* )
* @Vich\Uploadable
*/
class Admin
{ ... }
城市.php
/**
*
* @ORM\Table(name="city")
* @ORM\Entity
* @UniqueEntity(
* fields={"admin"},
* message="error message here"
* )
*/
class City
{...}
(我认为注释语法不同,因为 Admin 表是几个月前创建的,当时我还在 Symfony 4.0 上)
但我必须遗漏一些东西,或者它与关系的工作方式不同,因为我仍然收到 SQL 错误消息页面“SQLSTATE[23000]:完整性约束违规:1062 Duplicate entry '1' for key 'UNIQ_3946A254A73F0036'”。
我还想到了一个javascript方法来调用数据库并检查用户提供的城市是否已经与管理员相关联,这会更好,因为没有刷新和所有,但我无法检索结果根据我的要求。
客户端,在 keyup 上调用
function cityRequest(){
var cityCode = document.getElementById("city").value;
if(cityCode) {
$.ajax({
type: 'post',
url: "{{ path('checkCity')}}",
data: {
city_code:cityCode,
},
success: function (response) {
$('#cityMsg').html(response);
}
});
} else {
...
}
}
请求控制器
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\JsonResponse;
class AjaxController extends AbstractController
{
/**
* @Route("/ajaxrequest", name="checkCity", methods="GET|POST")
*/
public function checkCity(Request $request)
{
$code= $request->get('city_code');
$response = new JsonResponse(array(
'message' => $code));
return $response;
}
}
在响应中,“消息”显示为 null,但我希望它是用户输入的字符串(然后我可以继续获取我的城市并检查现有管理员...)
由于我对这两种方法都束手无策,非常感谢您的帮助.. 谢谢!
【问题讨论】:
-
您是否尝试过使用验证器? symfony.com/doc/current/validation.html
-
我相信这就是我在使用 UniqueEntity 约束时正在做的事情?我没有看到任何其他适合的约束
标签: javascript php symfony symfony4