【发布时间】:2016-03-23 14:07:28
【问题描述】:
我在这里遇到了 Symfony3 的这个问题。我对此很陌生,所以我不知道在哪里调试。
UserController.php
public function userEdit($id, Request $request)
{
$user = $this->getDoctrine()
->getRepository('AppBundle:Users')
->find($id);
$user->setEmail($user->getEmail());
$user->setPassword($user->getPassword());
$user->setPhone($user->getPhone());
$user->setType($user->getType());
$user->setName($user->getName());
$user->setFeedback($user->getFeedback());
$user->setPicture($user->getPicture());
$user->setRating($user->getRating());
$user->setInfo($user->getInfo());
$user->setDatecreated($user->getDatecreated());
$form = $this->createFormBuilder($user)
->add('email', EmailType::class, array('attr' => array('class' => 'form-control', 'style' => 'margin-bottom:15px')))
->add('password', RepeatedType::class, array(
'type' => PasswordType::class,
'invalid_message' => 'The password fields must match.',
'options' => array('attr' => array('class' => 'password-field form-control', 'style' => 'margin-bottom:15px')),
'required' => true,
'first_options' => array('label' => 'Password'),
'second_options' => array('label' => 'Repeat Password'),
))
->add('phone', TextType::class, array('attr' => array('class' => 'form-control', 'style' => 'margin-bottom:15px')))
->add('type', ChoiceType::class, array('choices' => array('Client' => 'Client', 'Builder' => 'Builder'), 'attr' => array('class' => 'form-control', 'style' => 'margin-bottom:15px')))
->add('name', TextType::class, array('attr' => array('class' => 'form-control', 'style' => 'margin-bottom:15px')))
->add('picture', FileType::class, array('data_class' => null,'attr' => array('class' => 'form-control', 'style' => 'margin-bottom:15px')))
->add('info', TextareaType::class, array('attr' => array('class' => 'form-control', 'style' => 'margin-bottom:15px')))
->add('save', SubmitType::class, array('label' => 'Register', 'attr' => array('class' => 'btn btn-primary', 'style' => 'margin-bottom:15px')))
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
//Get Data
$email = $form['email']->getData();
$password = $form['password']->getData();
$phone = $form['phone']->getData();
$type = $form['type']->getData();
$name = $form['name']->getData();
$picture = $form['picture']->getData();
$info = $form['info']->getData();
$now = new\DateTime('now');
$em = $this->getDoctrine()->getManager();
$user = $em->getRepository('AppBundle:Users')->find($id);
$user->setEmail($email);
$user->setPassword($password);
$user->setPhone($phone);
$user->setType($type);
$user->setName($name);
$user->setFeedback($user->getFeedback());
$user->setPicture($picture);
$user->setRating($user->getRating());
$user->setInfo($info);
$user->setDatecreated($now);
$images = base64_encode(stream_get_contents($user->getPicture()));
$em->flush();
$this->addFlash(
'notice',
'User Updated'
);
return $this->render('home/useredit.html.twig', array(
'user' => $user,
'form' => $form->createView(),
'images' => $images,
));
}
}
起初我收到此错误: 表单的视图数据应该是 Symfony\Component\HttpFoundation\File\File 类的实例,但它是一个 (n) 资源。您可以通过将“data_class”选项设置为 null 或添加将 a(n) 资源转换为 Symfony\Component\HttpFoundation\File\File 实例的视图转换器来避免此错误。
然后我在这里阅读了一些帖子并添加了'data_class' => null,,其中FileType::class 被添加到表单中。
从那时起,我收到此错误: 控制器必须返回一个响应(给定 null)。您是否忘记在控制器的某处添加 return 语句?
这是我将表单呈现到的文件: useredit.html.twig
{% extends 'base.html.twig' %}
{% block body %}
<h2 class="page-header">EDIT USER {{ user.name }}</h2>
{{ form_start(form) }}
{{ form_widget(form) }}
{{ form_end(form) }}
{% endblock %}
想法?
【问题讨论】: