0

我有用户模型 + 用户类型,注册模型 + 注册类型......当我执行它时,id 不会验证用户(内部数据)模型。下面的代码...

用户型号:

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Security\Core\User\UserInterface;
use Serializable;

/**
 * User
 *
 * @ORM\Table(name="user")
 * @ORM\Entity(repositoryClass="Site\MainBundle\Entity\Repository\UserRepository")
 */
class User implements UserInterface, Serializable
{
    /**
     * @return array|\Symfony\Component\Security\Core\User\Role[]
     */
    public function getRoles()
    {
        return array('ROLE_USER');
    }

    /**
     *
     */
    public function eraseCredentials()
    {

    }

    /**
     * @return string
     */
    public function serialize()
    {
        return serialize(array($this->id));
    }

    /**
     * @param string $serialized
     */
    public function unserialize($serialized)
    {
        list ($this->id,) = unserialize($serialized);
    }

    /**
     *
     */
    public function __construct()
    {
        $this->isActive = false;
        $this->salt = md5(uniqid(null, true));
    }

    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    public function getID()
    {
        return $this->id;
    }

    /**
     * @var string
     *
     * @ORM\Column(name="username", type="string", length=255, nullable=false)
     * @Assert\NotBlank(message="User name cannot be blank.")
     */
    private $username;

    public function setUserName($userName)
    {
        $this->username = $userName;

        return $this;
    }

    public function getUserName()
    {
        return $this->username;
    }

    /**
     * @var string
     *
     * @ORM\Column(name="password", type="string", length=255, nullable=false)
     * @Assert\NotBlank(message="Password cannot be blank.")
     */
    private $password;

    public function setPassword($password)
    {
        $this->password = $password;

        return $this;
    }

    public function getPassword()
    {
        return $this->password;
    }

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

    public function setSalt($salt)
    {
        $this->salt = $salt;

        return $this;
    }

    public function getSalt()
    {
        return $this->salt;
    }

    /**
     * @var string
     *
     * @ORM\Column(name="email", type="string", length=255, nullable=false)
     * @Assert\NotBlank(message="E-Mail cannot be blank.")
     * @Assert\Email(message="Invalid email address.")
     */
    private $email;

    public function setEmail($email)
    {
        $this->email = $email;

        return $this;
    }

    public function getEmail()
    {
        return $this->email;
    }

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

    public function setIsActive($isActive)
    {
        $this->isActive = $isActive;

        return $this;
    }

    public function getIsActive()
    {
        return $this->isActive;
    }

}

用户类型:

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;

class UserType extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array                $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('username', 'text', array('label' => 'User name'))
            ->add(
                'password',
                'repeated',
                array(
                    'label' => 'Password',
                    'first_name' => 'password',
                    'second_name' => 'confirm',
                    'type' => 'password'
                )
            )
            ->add('email', 'text', array('label' => 'E-Mail'));
    }

    /**
     * @param OptionsResolverInterface $resolver
     */
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(
            array(
                'data_class' => 'Site\MainBundle\Entity\User',
                'required' => false
            )
        );
    }

    /**
     * @return string
     */
    public function getName()
    {
        return 'main_user';
    }
}

注册型号:

use Symfony\Component\Validator\Constraints as Assert;
use Site\MainBundle\Entity\User;

/**
 * Register
 */
class Register
{
    /**
     * @var Site\MainBundle\Entity\User
     *
     * @Assert\Type(type="Site\MainBundle\Entity\User")
     * @Assert\Valid()
     */
    protected $user;

    public function setUser(User $user)
    {
        $this->user = $user;

        return $this;
    }

    public function getUser()
    {
        return $this->user;
    }

    /**
     * @var boolean
     *
     * @Assert\NotBlank(message="No terms accepted.")
     * @Assert\True(message="You have to accept terms to be registered.")
     */
    protected $terms;

    public function setTerms($terms)
    {
        $this->terms = (Boolean)$terms;

        return $this;

    }

    public function getTerms()
    {
        return $this->terms;
    }
}

注册类型:

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use Site\MainBundle\Form\UserType;

class RegisterType extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array                $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('user', new UserType())
            ->add('terms', 'checkbox');
    }

    /**
     * @param OptionsResolverInterface $resolver
     */
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(
            array(
                'data_class' => 'Site\MainBundle\Entity\Register',
                'required' => false
            )
        );
    }

    /**
     * @return string
     */
    public function getName()
    {
        return 'main_register';
    }
}

和带树枝的控制器。树枝的一部分:

{% block page_content %}

    <form method="post" action="{{ path('main_register') }}">
        {{ form_errors(formRegister.user.username) }}
        {{ form_row(formRegister.user.username) }}

        {{ form_errors(formRegister.user.password.password) }}
        {{ form_row(formRegister.user.password.password) }}

        {{ form_errors(formRegister.user.password.confirm) }}
        {{ form_row(formRegister.user.password.confirm) }}

        {{ form_errors(formRegister.user.email) }}
        {{ form_row(formRegister.user.email) }}

        {{ form_errors(formRegister.terms) }}
        {{ form_row(formRegister.terms) }}

        <button type="submit">Register</button>
    </form>

{% endblock %}

注册控制器:

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Site\MainBundle\Form\RegisterType;
use Site\MainBundle\Entity\Register;

/**
 * RegisterController
 */
class RegisterController extends Controller
{
    public function defaultAction()
    {
        $formRegister = $this->createForm(new RegisterType(), new Register());

        if ($this->getRequest()->isMethod('post')) {
            $formRegister->handleRequest($this->getRequest());

            if ($formRegister->isValid()) {
                echo 'form is valid';
            }
        }


        $twig = 'SiteMainBundle:register:default.html.twig';
        $data = array(
            'formRegister' => $formRegister->createView()
        );

        return $this->render($twig, $data);
    }
}

哪里可能有问题?请帮忙。

更新

echo "<pre>";
echo $formRegister->getErrorsAsString();
echo '</pre>';

说:

user:
    username:
        No errors
    password:
        password:
            No errors
        confirm:
            No errors
    email:
        No errors
terms:
    ERROR: No terms accepted.
    ERROR: You have to accept terms to be registered.

如您所见,模型用户根本没有经过验证... =\

4

2 回答 2

0

终于找到了 错误在这部分。我想禁用这种浏览器验证方式...

'required' => false

但。这个“家伙”(我的意思是开发人员)在一个环境中比较了两件事。因此,如果我们将 'required' 设置为 false,我们的字段将不会被验证。如果为真,它将通过浏览器验证器进行验证.. =\ 也许有人知道如何避免它(浏览器验证)而不是通过编辑树枝文件(某些选项或其他设置)?

PS:为了避免浏览器我改变了树枝。

<form method="post" action="{{ path('main_register') }}" novalidate>
于 2013-09-09T20:46:20.587 回答
0

如果你想通过代码来做,在你的控制器中,你的代码应该是这样的:

class RegisterController extends Controller
{
    public function defaultAction()
    {
        $formRegister = $this->createForm(new RegisterType(), new Register(), array(
            'attr'=> array('novalidate'=>'novalidate'),
        ));

使用“createForm”的第三个参数,您可以修改表单(例如:动作、类等)。

我通常使用:

$form = $this->createForm(new RegistroType(), $usuario, array(
    'action' => $this->generateUrl('jgo_registro'),
    'method' => 'POST',
    'attr'=> array('novalidate'=>'novalidate'),
));
于 2014-08-02T02:33:02.083 回答