我很难弄清楚如何使用Symfony表单处理JSON请求(使用v3.0.1).
这是我的控制器:
/**
* @Route("/tablet")
* @Method("POST")
*/
public function tabletAction(Request $request)
{
$tablet = new Tablet();
$form = $this->createForm(ApiTabletType::class, $tablet);
$form->handleRequest($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($tablet);
$em->flush();
}
return new Response('');
}
Run Code Online (Sandbox Code Playgroud)
我的形式:
class ApiTabletType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('macAddress')
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => 'AppBundle\Entity\Tablet'
]);
}
}
Run Code Online (Sandbox Code Playgroud)
当我发送POST请求并将Content-Type标头正确设置为application/json时,我的表单无效...所有字段都为空.
这是我在评论该if ($form->isValid())行时得到的异常消息:
当执行 '(?,?)INSERT INTO片剂(MAC_ADDRESS,SITE_ID)VALUES' 使用参数[NULL,NULL]发生异常:
我每次尝试发送不同的JSON,结果相同:
{"id":"9","macAddress":"5E:FF:56:A2:AF:15"}{"api_tablet":{"id":"9","macAddress":"5E:FF:56:A2:AF:15"}}getBlockPrefix返回的是"api_tablet" (Symfony 3相当于 …
我正在寻找一种方法来添加一个EventListener,它会在第一次触发后自动删除它,但我无法想办法按照我想要的方式执行此操作.
我找到了这个功能(这里):
public class EventUtil
{
public static function addOnceEventListener(dispatcher:IEventDispatcher,eventType:String,listener:Function):void
{
var f:Function = function(e:Event):void
{
dispatcher.removeEventListener(eventType,f);
listener(e);
}
dispatcher.addEventListener(eventType,f);
}
}
Run Code Online (Sandbox Code Playgroud)
但不必写:
EventUtil.addOnceEventListener( dispatcher, eventType, listener );
Run Code Online (Sandbox Code Playgroud)
我想以通常的方式使用它:
dispatcher.addOnceEventListener( eventType, listener );
Run Code Online (Sandbox Code Playgroud)
有没有人知道如何做到这一点?
任何帮助都会非常感激.
我有一个抽象类(Object2D)和几个继承Object2D的类(例如DisplayObject2D)
我使用List来存储对这些对象的所有引用.
我想遍历此List中的每个DisplayObject2D.
到目前为止,以下代码正在运行,但对C#开发不熟悉,我想知道是否有更好的做法:
List<Object2D> tmp = objects.FindAll( delegate( Object2D obj )
{ return obj is DisplayObject2D; } );
foreach( DisplayObject2D obj in tmp )
{
...
}
Run Code Online (Sandbox Code Playgroud)
提前致谢!