我创建一个新对象并将其绑定到表单.用户填写表单并转到预览页面.我将用户响应存储在会话中.
当用户返回编辑表单时,当我尝试从会话重新加载对象时,问题就出现了.我得到的实体传递给选择字段必须是托管错误.
任何人都知道我可能会出错的地方?下面是控制器的代码.
public function previewdealAction(Request $request){
$session = $this->getRequest()->getSession();
$coupon = $session->get('coupon');
$form = $this->createForm(new CouponType(), $coupon);
if ($request->getMethod() == 'POST') {
//bind the posted form values
$form->bindRequest($request);
//once a valid form is submitted ...
if ($form->isValid()){
//Proceed to Previewing deal
$file = $coupon->getImage();
$file->upload();
$session->set('coupon', $coupon);
$repository = $this->getDoctrine()
->getRepository('FrontendUserBundle:Coupon');
$coupons = $repository->findAll();
return $this->render('FrontendHomeBundle:Merchant:dealpreview.html.twig', array('coupon'=>$coupon, 'coupons'=>$coupons));
}
}
}
public function builddealAction(Request $request){
$em = $this->get('doctrine')->getEntityManager();
$user = $this->container->get('security.context')->getToken()->getUser();
//check for a coupon session variable
$session = …Run Code Online (Sandbox Code Playgroud) 我正在尝试验证一个表单,其中包含一些需要唯一的字段 - 用户名和电子邮件地址.如果我提交表单,我会收到数据库错误.我想像我为其他一切使用验证器 - 现在我正在尝试在对象中使用自定义getter和isvalidUsername函数,我不确定在对象中使用实体管理器是否是执行此操作的最佳方法.继续我到目前为止所做的工作......
Frontend\UserBundle\Entity\User:
properties:
email:
- NotBlank: ~
- Email: ~
username:
- NotBlank: ~
getters:
validUsername:
- "True": { message: "Duplicate User detected. Please use a different username." }
validEmail:
- "True": { message: "Duplicate email detected. Please use a different email." }
Run Code Online (Sandbox Code Playgroud)
fosuserbundle中内置了唯一的验证器,但我无法弄清楚如何使用它们.
我将如何生成这个...我想保持我的主键顺序,并为添加到数据库的每个新对象生成一个12位数的唯一引脚.
它不能仅仅是自动增量的原因是我不希望序列号很容易猜到.
它需要是整数,因为我将需要在电话簿上拨打验证码.
除了编写自定义脚本将JSON对象解码为PHP实体之外,有没有人知道是否有一种简单的方法?
我正在使用下面的脚本编码为JSON,但是当我解码它时,它是一个数组,而不是一个实体.
$serializer = new Serializer(array(new GetSetMethodNormalizer()), array('json' => new
JsonEncoder()));
$json = $serializer->serialize($coupon, 'json');
$session->set('json', $json);
Run Code Online (Sandbox Code Playgroud)
然后我以这种方式解码
$session = $this->getRequest()->getSession();
$json = $session->get('json');
$serializer = new Serializer(array(new GetSetMethodNormalizer()), array('json' => new JsonEncoder()));
$coupon = $serializer->decode($json, 'json');
Run Code Online (Sandbox Code Playgroud)
但就像我说的......它不再是优惠券实体,它只是一个阵列.