2015-03-11 2 views
-1

Я создал форму пароля для обновления, и всякий раз, когда я пытаюсь отправить данные, я получил ошибку, например The class XXX was not found in the chain configured namespaces. Что я здесь делаю неправильно? Ошибка возникает, когда я пытаюсь сохранить данные в базе данных. Я пробовал ответ от implementing update password Вот мои коды. Это мой ChangePasswordType.phpОшибка при сохранении данных в базе данных в symfony2

<?php 

namespace RetailMapping\Bundle\UserBundle\Form; 

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

class ChangePasswordType extends AbstractType 
{ 
    /** 
    * @param FormBuilderInterface $builder 
    * @param array    $options 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('oldPassword', 'password'); 
     $builder->add('newPassword', 'repeated', array(
      'type' => 'password', 
      'invalid_message' => 'The password fields must match.', 
      'required' => true, 
      'first_options' => array('label' => 'Password'), 
      'second_options' => array('label' => 'Repeat Password'), 
     )); 
    } 

    /** 
    * @param OptionsResolverInterface $resolver 
    */ 
    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $resolver->setDefaults(array(
       'data_class' => 'RetailMapping\Bundle\UserBundle\Form\Model\ChangePassword', 
     )); 
    } 

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

Это мой ChangePassword.php

<?php 
namespace RetailMapping\Bundle\UserBundle\Form\Model; 

use Symfony\Component\Security\Core\Validator\Constraints as SecurityAssert; 
use Symfony\Component\Validator\Constraints as Assert; 

class ChangePassword 
{ 
    /** 
     * @SecurityAssert\UserPassword(
     *  message = "Wrong value for your current password" 
     *) 
     */ 
    protected $oldPassword; 

    /** 
     * @Assert\Length(
     *  min = 6, 
     *  minMessage = "Password should by at least 6 chars long" 
     *) 
     */ 
    protected $newPassword; 

    public function setOldPassword($oldPassword) 
    { 
     $this->oldPassword = $oldPassword; 
    } 

    public function getOldPassword() 
    { 
     return $this->oldPassword; 
    } 

    public function setNewPassword($newPassword) 
    { 
     $this->newPassword = $newPassword; 
    } 

    public function getNewPassword() 
    { 
     return $this->newPassword; 
    } 
} 

Это мой UserController.php

<?php 
namespace RetailMapping\Bundle\UserBundle\Controller; 

use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use RetailMapping\Bundle\UserBundle\Form\ChangePasswordType; 
use Symfony\Component\HttpFoundation\Request; 
use RetailMapping\Bundle\UserBundle\Form\Model\ChangePassword; 

class UserController extends Controller 
{ 
public function editPasswordAction(Request $request) 
    { 
     $form = $this->createForm(new ChangePasswordType(), new ChangePassword()); 
     $form->handleRequest($request); 
     if ($form->isSubmitted() && $form->isValid()) { 
      $data = $form->getData(); 
      $form->getData(); 
      $em = $this->getDoctrine()->getManager(); 
      $em->persist($data); 
      $em->flush(); 
      dump($form->getData()); 
      die; 
     } 

     return $this->render('User/editPassword.html.twig', [ 
       'form' => $form->createView(), 
     ]); 
    } 
} 
+0

Проблема решена. Я добавил этот код. 'if ($ form-> isSubmitted() && $ form-> isValid()) { \t \t $ data = $ form-> getData(); \t $ user = $ this-> getUser(); \t \t \t $ user-> setPassword ($ data-> getNewPassword()); $ em = $ this-> getDoctrine() -> getManager(); $ em-> persist ($ user); $ em-> flush(); } ' – Raaz

ответ

0

По умолчанию ваш объект сопоставлен Entity имен.

DoctrineExtension code on github

protected function getMappingObjectDefaultName() 
{ 
    return 'Entity'; 
} 

Вы должны поместить папку ChangePassword.php внутри Entity.

UPDATE:

Похожий вопрос - you can look at

+0

Разместил файл changepassword.php в папке сущности, но получил ошибку, например ** Класс« RetailMapping \ Bundle \ UserBundle \ Entity \ ChangePassword »** не является допустимым сущностью или отображенным суперклассом. я добавляю ** функцию getMappingObjectDefaultName() ** в свой код? – Raaz

+0

@RajShakya вам не хватает '/ ** * @ORM \ Entity * @ORM \ Table (имя = "YOUR_TABLE_NAME") * /' в верхней части вашего класса –

+0

Нет, я уже проверил ссылку и это не имеет отношения к моей проблеме – Raaz

Смежные вопросы