Как обновить объект в Symfony 3? - PullRequest
0 голосов
/ 27 мая 2018

Я хочу обновить информацию профиля, но после всего, что я сделал, ничего не произошло ..

Я работаю с использованием ajax для отправки данных из ветки в updateAction ..

ajax:

 $(document).ready(function ()
        {
            $("#btnEnregistrer").click(function () {

                var URL = "{{path('profile_update')}}";
                var n = $('#txtNom').val();
                var nAr = $('#txtNomAr').val();
                var pre = $('#txtPrenom').val();
                var preAr = $('#txtPrenomAr').val();
                var passOld = $('#txtPassOld').val();
                var pass1 = $('#txtPassNew').val();
                var pass2 = $('#txtPassNew2').val();
                var dateN = $('#txtDateN').val();
                var ad = $('#txtAdresse').val();
                var adAr = $('#txtAdresseAr').val();
                var mob = $('#txtMobile').val();
                var fixe = $('#txtFixe').val();

                var sexe ;
                if($('#rbHomme').is(':checked'))
                    sexe="Homme";
                else
                    if($('#rbFemme').is(':checked'))
                        sexe="Femme";

                 var DATA = 'nom='+n+'&nomAr='+nAr+'&prenom='+pre+'&prenomAr='+preAr+'&sexe='+sexe+'&passOld='+passOld+'&passNew='+pass1+'&passNew2='+pass2+'&dateN='+dateN+'&adresse='+ad+'&adresseAr='+adAr+'&mobile='+mob+'&fixe='+fixe;

                $.ajax({
                 type: "POST",
                    url: URL,
                    data: DATA,
                    cache: false
                });
            });

});  

{{путь ('profile_update')}} - это маршрут updateAction:

public function updateAction(Request $request)
    {
        $em = $this->getDoctrine()->getManager();
        if ($request->isXmlHttpRequest()) {

        $utilisateur = $this->get('session')->get('user');

        $Vparam = $em->getRepository('ParametersBundle:Parameter')->findOneBy(['id' => $utilisateur->getVille()]);

        $utilisateur->setNom($request->get('nom'));
        $utilisateur->setNomAr($request->get('nomAr'));
        $utilisateur->setPrenom($request->get('prenom'));
        $utilisateur->setPrenomAr($request->get('prenomAr'));


        $s = $request->get('sexe');

        if($s == "Homme")
        {
            $utilisateur->setSexe("Homme");
            $utilisateur->setSexeAr("ذكر");
        }
        else
        {
            $utilisateur->setSexe("Femme");
            $utilisateur->setSexeAr("أنثى");
        }

        $utilisateur->setDateN($request->get('dateN'));
        $utilisateur->setAdresse($request->get('adresse'));
        $utilisateur->setAdresseAr($request->get('adresseAr'));


        if($request->get('passOld') !="" && $request->get('passNew') !="" && $request->get('passNew2') !="")
        {
            if($request->get('passOld') == self::getHash($utilisateur->getPassword(), $utilisateur->getSalt()))
            {
                if($request->get('passNew') == $request->get('passNew2'))
                {
                    $utilisateur->setPassword(self::getHash($request->get('passNew'), $utilisateur->getSalt()));
                }
                else
                { 
                    return $this->redirectToRoute('ens_profile');
                }
            }
            else
            {
               return $this->redirectToRoute('ens_profile');
            }
        }

        $em->flush();

        return $this->redirectToRoute('ens_profile');

    }

route.yml:

persons_connexion:
    path:     /connexion
    defaults: { _controller: PersonsBundle:Default:connexion }

persons_deconnexion:
    path:     /deconnexion
    defaults: { _controller: PersonsBundle:Default:deconnexion }

ens_profile:
    path:     /Enseignant/profile
    defaults: { _controller: PersonsBundle:Enseignant:profile }

profile_update:
    path:     /Enseignant/profile/miseajour
    defaults: { _controller: PersonsBundle:Enseignant:update }

параметры отображаются в SymfonyПрофилировщик как параметры POST .. но когда я посмотрел на таблицу в базе данных, я обнаружил, что ничего не произошло .. Итак, в чем проблема?и как я могу это решить?

Ответы [ 2 ]

0 голосов
/ 27 мая 2018

Во-первых, вы делаете что-то действительно странное ... Вместо того, чтобы javascript извлекал ваши пользовательские данные в DOM, почему бы вам не использовать форму и не отправить ее напрямую?

Вы кажетесь довольно новымSymfony, поэтому я предложу вам лучший способ узнать, как Symfony делает вещи ... Используйте командные строки для генерации сущностей, контроллеров, форм и т. д. ...

Вот списокбольшинство пользовательских команд для работы с Symfony:

Создание пакета
php bin/console generate:bundle

Созданиесущность
php bin/console doctrine:generate:entity

Обновление всех получателей и установщиков сущностей в пакете
php bin/console doctrine:generate:entities *NameBundle*

Обновить один метод получения и установки объекта
php bin/console doctrine:generate:entities *NameBundle:Entity*

Проверка связей объектов и базы данных Squeleton
php bin/console d:s:v

Создать тип формы объекта
php bin/console doctrine:generate:for

Создать контроллер объекта, тип формы иview
php bin/console doctrine:generate:crud --with-write

Дамп SQL-изменений в консоль.
php bin/console doctrine:schema:update --dump-sql
Использовать перед обновлением скелетачтобы проверить, все ли соответствуют вашим желаниям.

Применить изменения SQL
php bin/console doctrine:schema:update --force

Списоквсе существующие маршруты в консоли.
php bin/console debug:router

Очистить производственный кеш
php bin/console cache:clear --no-warmup --env=prod

Очистить кэш developmnt
php bin/console cache:clear --no-warmup --env=dev'

Поскольку это облегчает задачу, я предлагаю вам использовать аннотацию для маршрутов вместо yml.

Для вашего кода это настоящий беспорядок и он недействителен как есть ...
Если вы использовали форму, вот как должно выглядеть основное действие редактирования

public function editAction(Request $request, User $user) {
    $editForm=$this->createForm(UserType::class, $user);
    $editForm->handleRequest($request);
    if($editForm->isSubmitted() && $editForm->isValid()) {
        $this->getDoctrine()
             ->getManager()
             ->flush();

        return $this->redirectToRoute('_edit', array('id'=>$user->getId()));
    }

    return $this->render('security/edit.html.twig', array(
        'user'=>$user,
        'edit_form'=>$editForm->createView(),
    ));
}

Выв коде отсутствует часть формы, и он действительно опасен как есть ...
В качестве хорошего примера вы не отправляете токен формы, что приведет к ошибке при попытке обновить базу данных.

Боюсь, что оказание вам помощиКодировать это совершенно невозможно, поскольку вы не используете Symfony, как следует.

0 голосов
/ 27 мая 2018

Вам необходимо $em->persist($utilisateur) до сброса, если оно не пришло от вашего менеджера сущностей.

...