drvvvuyia15070493 2016-03-31 18:28
浏览 80

表单没有发送,我的代码有错误?

I have a problem with the form, apparently not sent properly or there is some error. I'm new to Symfony and use version 3.0.

Sorry for my bad English.

Here is my code:

UserController.php

public function addAction()
{
    $user = new User();
    $form = $this->createForm(UserType::class, $user);

    return $this->render("asignacionesBundle:User:add.html.twig", array(
        'form' => $form->createView()
    ));
}

public function createAction(Request $request)
{
    $user = new User();
    $form = $this->createForm(UserType::class, $user);
    $form->handleRequest($request); #Obtengo el formulario y lo proceso.

    if($form->isSubmitted()) { #Compruebo si el formulario es válido
        $data = $this->getDoctrine->getManager(); # Busca el objeto en la entidad para procesar en la db
        $data->persist($user); # Administra el objeto
        $data->push(); # Procesa los datos, hace la insercción a la base de datos.

        return $this->redirectToRoute('asignaciones_index');
    } else {
        return $this->Response("Entro acá");
    }


    return $this->render("asignacionesBundle:User:add.html.twig", array(
        'form' => $form->createView()
    ));

}

User.php(Entity)

namespace asignacionesBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * User
 *
 * @ORM\Table(name="users")
 * @ORM\Entity(repositoryClass="asignacionesBundle\Repository\UserRepository")
 * @ORM\HasLifecycleCallbacks()
*/
 class User
 {
   /**
    * @var int
    *
    * @ORM\Column(name="id", type="integer")
    * @ORM\Id
    * @ORM\GeneratedValue(strategy="AUTO")
   */
   private $id;

/**
 * @var string
 *
 * @ORM\Column(name="username", type="string", length=50)
 */
private $username;

/**
 * @var string
 *
 * @ORM\Column(name="first_name", type="string", length=100)
 */
private $firstName;

/**
 * @var string
 *
 * @ORM\Column(name="last_name", type="string", length=100)
 */
private $lastName;

/**
 * @var string
 *
 * @ORM\Column(name="email", type="string", length=100)
 */
private $email;

/**
 * @var string
 *
 * @ORM\Column(name="password", type="string", length=255)
 */
private $password;

/**
 * @var string
 *
 * @ORM\Column(name="role", type="string", columnDefinition="ENUM('ROLE_ADMIN', 'ROLE_USER')", length=50)
 */
private $role;

/**
 * @var bool
 *
 * @ORM\Column(name="isactive", type="boolean")
 */
private $isactive;

/**
 * @var \DateTime
 *
 * @ORM\Column(name="created_at", type="datetime")
 */
private $createdAt;

/**
 * @var \DateTime
 *
 * @ORM\Column(name="update_at", type="datetime")
 */
private $updateAt;


/**
 * Get id
 *
 * @return int
 */
public function getId()
{
    return $this->id;
}

/**
 * Set username
 *
 * @param string $username
 *
 * @return User
 */
public function setUsername($username)
{
    $this->username = $username;

    return $this;
}

/**
 * Get username
 *
 * @return string
 */
public function getUsername()
{
    return $this->username;
}

/**
 * Set firstName
 *
 * @param string $firstName
 *
 * @return User
 */
public function setFirstName($firstName)
{
    $this->firstName = $firstName;

    return $this;
}

/**
 * Get firstName
 *
 * @return string
 */
public function getFirstName()
{
    return $this->firstName;
}

/**
 * Set lastName
 *
 * @param string $lastName
 *
 * @return User
 */
public function setLastName($lastName)
{
    $this->lastName = $lastName;

    return $this;
}

/**
 * Get lastName
 *
 * @return string
 */
public function getLastName()
{
    return $this->lastName;
}

/**
 * Set email
 *
 * @param string $email
 *
 * @return User
 */
public function setEmail($email)
{
    $this->email = $email;

    return $this;
}

/**
 * Get email
 *
 * @return string
 */
public function getEmail()
{
    return $this->email;
}

/**
 * Set password
 *
 * @param string $password
 *
 * @return User
 */
public function setPassword($password)
{
    $this->password = $password;

    return $this;
}

/**
 * Get password
 *
 * @return string
 */
public function getPassword()
{
    return $this->password;
}

/**
 * Set role
 *
 * @param string $role
 *
 * @return User
 */
public function setRole($role)
{
    $this->role = $role;

    return $this;
}

/**
 * Get role
 *
 * @return string
 */
public function getRole()
{
    return $this->role;
}

/**
 * Set isactive
 *
 * @param boolean $isactive
 *
 * @return User
 */
public function setIsactive($isactive)
{
    $this->isactive = $isactive;

    return $this;
}

/**
 * Get isactive
 *
 * @return bool
 */
public function getIsactive()
{
    return $this->isactive;
}

/**
 * Set createdAt
 *
 * @param \DateTime $createdAt
 *
 * @return User
 */
public function setCreatedAt($createdAt)
{
    $this->createdAt = $createdAt;

    return $this;
}

/**
 * Get createdAt
 *
 * @return \DateTime
 */
public function getCreatedAt()
{
    return $this->createdAt;
}

/**
 * Set updateAt
 *
 * @param \DateTime $updateAt
 *
 * @return User
 */
public function setUpdateAt($updateAt)
{
    $this->updateAt = $updateAt;

    return $this;
}

/**
 * Get updateAt
 *
 * @return \DateTime
 */
public function getUpdateAt()
{
    return $this->updateAt;
}

/**
 * @ORM\PrePersist
*/
public function setCreatedAtValue() # Actualiza la hora y fecha al momento de insertar algo en la base de datos
{
    $this->createdAt = new \DateTime();
}

/**
 * @ORM\PrePersist
 * @ORM\PreUpdate
*/
public function setUpdateAtValue() # Actualiza la hora y fecha al momento de actualizar algo en la base de datos
{
    $this->updateAt = new \DateTime();
}

}

UserType.php(Form)

namespace asignacionesBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
class UserType extends AbstractType
{
/**
 * @param FormBuilderInterface $builder
 * @param array $options
 */
public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('username', TextType::class)
        ->add('firstName', TextType::class)
        ->add('lastName', TextType::class)
        ->add('email', EmailType::class)
        ->add('password', PasswordType::class)
        ->add('role', ChoiceType::class, array('choices' => array('ROLE_ADMIN' => 'Administrador', 'ROLE_USER' => 'Usuario'), 'placeholder' => 'Selecciona una opción'))
        ->add('isactive', CheckboxType::class)
        ->add('save', SubmitType::class, array('label' => 'Guardar Usuario'))
    ;

}

/**
 * @param OptionsResolver $resolver
*/
public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'asignacionesBundle\Entity\User'
    ));
}

}

And 'add.html.twig'

{% extends 'layout.html.twig' %}

{% block body %}
{{ parent() }}
<form class="form-horizontal">
    <fieldset>
        <div class="container">

            {{ form_start(form, {'action':'', 'method':'POST'}) }}

            <div class="form-group">
                <div class="col-md-6">
                    {{ form_label(form.username) }}
                    {{ form_errors(form.username) }}
                    {{ form_widget(form.username, {'attr' : {'class': 'form-control', 'placeholder': 'Nombre de Usuario'} }) }}
                </div>
            </div>

            <div class="form-group">
                <div class="col-md-6">
                    {{ form_label(form.firstName) }}
                    {{ form_errors(form.firstName) }}
                    {{ form_widget(form.firstName, {'attr' : {'class': 'form-control', 'placeholder': 'Nombre'} }) }}
                </div>
            </div>

            <div class="form-group">
                <div class="col-md-6">
                    {{ form_label(form.lastName) }}
                    {{ form_errors(form.lastName) }}
                    {{ form_widget(form.lastName, {'attr' : {'class': 'form-control', 'placeholder': 'Apellido'} }) }}
                </div>
            </div>

            <div class="form-group">
                <div class="col-md-6">
                    {{ form_label(form.email) }}
                    {{ form_errors(form.email) }}
                    {{ form_widget(form.email, {'attr' : {'class': 'form-control', 'placeholder': 'Correo Electrónico'} }) }}
                </div>
            </div>

            <div class="form-group">
                <div class="col-md-6">
                    {{ form_label(form.password) }}
                    {{ form_errors(form.password) }}
                    {{ form_widget(form.password, {'attr' : {'class': 'form-control', 'placeholder': 'Contraseña Electrónico'} }) }}
                    <div class="checkbox">
                        <label>
                            {{ form_widget(form.isactive) }}{% trans %}Activo{% endtrans %}
                        </label>
                    </div>
                </div>
            </div>

            <div class="form-group">
                <div class="col-md-6">
                    {{ form_label(form.role) }}
                    {{ form_errors(form.role) }}
                    {{ form_widget(form.role, {'attr' : {'class': 'form-control'} }) }}
                </div>
            </div>
            <div class="form-group">

                <div class="col-lg-10 col-lg-offset-2">

                 {{ form_widget(form.save, {'attr': {'class': 'btn btn-success'}}) }}
                </div>
            </div>

        </div>
    </fieldset>
    {{ form_end(form) }}
</form>
{% endblock %}

Sorry for the mess of code, I hope you can help me. And sends the URL by pressing the button Submit:

web/app_dev.php/user/add?user%5Busername%5D=asdsadas&user%5BfirstName%5D=dasdasdsad&user%5BlastName%5D=asdsad&user%5Bemail%5D=asd%40email.com&user%5Bpassword%5D=asdsadasd&user%5Bisactive%5D=1&user%5Brole%5D=Administrador&user%5Bsave%5D=&user%5B_token%5D=0k9C38QskgnlnR-y-WodFaN4GQJOBBhdSk8r7_JUvzA
  • 写回答

2条回答 默认 最新

  • dongxichan8627 2016-03-31 18:51
    关注

    Your form action need to point to the route of the controller method createAction instead of addAction.

    So try change the line:

            {{ form_start(form, {'action':'', 'method':'POST'}) }}
    

    with something like:

            {{ form_start(form, {'action': path('_route_name') , 'method':'POST'}) }}
    

    Where _route_name is the route name of the action method addAction. Here some example from the doc.

    In addiction, in the addAction method i don't know what is the method push on the entity manager, i suspect a typo with the flush method for persisting the new object. So I think you need to change the following line:

        $data->push(); # Procesa los datos, hace la insercción a la base de datos.
    

    with

        $data->flush(); 
    

    Hope this help

    评论

报告相同问题?

悬赏问题

  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?