簡體   English   中英

Symfony2下沒有數據庫更新

[英]No database updating under Symfony2

我正在Symfony2下的一個項目中工作,遇到一個小但令人不安的問題。

我有一個實體,代表由網站致力於的協會領導的項目。 在這個實體中,我有一個名為“ $ inscriptionsOuvertes”的字段,該字段用於注冊學生是否可以為每個項目注冊自己。

我想創建一個頁面,在其中可以輕松地為每個項目修改此變量的狀態,但是我制作的表單對數據庫沒有影響。

不管我做什么,$ inscriptionsOuvertes變量始終設置為false。 而且,如果我在phpmyadmin下對任何項目手動將其更改為true,則在我提交表單后立即將其返回false。

這是該實體的相關代碼:

<?php

namespace CEC\SecteurProjetsBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Projet
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="CEC\SecteurProjetsBundle\Entity\ProjetRepository")
 */
class Projet
{
/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

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

/**
* @var string
*
* @ORM\Column(name="slug", type="string", length=100)
*/
private $slug; <br>//Autres propriétés de la classe

/**
* @var boolean
*
* @ORM\Column(name="inscriptions_ouvertes", type="boolean")
*/
private $inscriptionsOuvertes = false;



//Other properties, getters et setters...

/**
 * Set inscriptionsOuvertes
 *
 * @param boolean $etat
 * @return Projet
 */
public function setInscriptionsOuvertes($etat)
{
    $this->inscriptionsOuvertes = $etat;

    return $this;
}

/**
 * Set inscriptionsOuvertes
 *
 * @return Projet
 */
public function switchInscriptionsOuvertes()
{
    $this->inscriptionsOuvertes = !$this->inscriptionsOuvertes;

    return $this;
}

/**
 * Get inscriptionsOuvertes
 *
 * @return boolean
 */
public function getInscriptionsOuvertes()
{
    return $this->inscriptionsOuvertes;
}

}

這是我創建的表單的代碼:

{% extends 'CECSecteurProjetsBundle:Projets:base.html.twig' %}


{% block right %}

{{parent()}}
<div class="well" style = "padding-left:20px;padding-right:15px;">
<h1>Ouverture des inscriptions aux projets </h1>

<form class="form form-horizontal" method="post" action="{{ path('ouverture_inscription') }}"><br/>
Voulez-vous ouvrir les inscriptions aux projets ?<br/>

{% for projet in projets%}
<label for="{{projet.slug}}">{{projet.nom}}</label>
<div class="btn-group" data-toggle="buttons" id="{{projet.slug}}">
    <label class="btn btn-success" >
    <input type="radio" name="{{projet.slug}}" id="option1" value="true" autocomplete="off" {% if projet.inscriptionsOuvertes %}checked {% endif %}> Oui
    </label>
    <label class="btn btn-danger">
    <input type="radio"  name="{{projet.slug}}" id="option2" value="false" autocomplete="off" {% if not projet.inscriptionsOuvertes %}checked {% endif %}> Non
    </label>
</div><br/>
{% endfor %}
<div class="footer-controls">
<br/>
    <input type="submit" value="Mettre à jour les inscriptions aux projets" class="btn btn-primary" />
    <a href="{{ path('description_projets') }}" class="btn pull-right">Annuler</a>
</div>
</form>
</div>
{% endblock %}

最后是負責驗證表單和更新數據庫的方法。

<?php

namespace CEC\SecteurProjetsBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use CEC\SecteurProjetsBundle\Form\ProjetType;
use CEC\SecteurProjetsBundle\Form\ReunionType;
use CEC\SecteurProjetsBundle\Form\DossierType;
use CEC\SecteurProjetsBundle\Entity\Reunion;
use CEC\SecteurProjetsBundle\Entity\Dossier;

class ProjetsController extends Controller
{
//Other methods of the controller

/**
* Mise à jour de l'état d'ouverture des inscriptions des projets
*
* @Template();
*/
public function inscriptionsAction()
{
    $em = $this->getDoctrine()->getEntityManager();
    $projets = $this->getDoctrine()->getRepository('CECSecteurProjetsBundle:Projet')->findAll();
    $request = $this->getRequest();
    $data = $request->request->all();
    $message ='';

    if($request->isMethod('POST'))
    {
        foreach($projets as $projet)
        {
            $slug = $projet->getSlug();
            $projet->setInscriptionsOuvertes($data[$slug]);

            $em->flush();

        }

        $this->get('session')->setFlash('success', 'L\'ouverture des inscriptions a bien été mise à jour. ');
        return $this->redirect($this->generateUrl('description_projets'));

    }

    return array('projets'=>$projets);
}

}

我瀏覽了這個網站,發現這個主題與我的主題非常相似,但又有所不同,沒有回答我的問題(我認為)。

你們中的任何人都知道這種形式的情況嗎? 我必須承認,我暫時看不到這一切背后的邏輯模式。

有關我進行的測試的詳細信息:

  • 正確定義了數組$ data(對於每個子段,每個狀態均正確鏈接)。

  • $ inscriptionsOuvertes-> getInscriptionsOuvertes()在將其設置為所需值之前調用它時,返回null。

  • 一旦我通過-> setInscriptionsOuvertes($ data [$ slug])更新了它,$ inscriptionsOuvertes-> getInscriptionsOuvertes()就會返回正確的狀態。

  • 在數據庫中將每個變量手動更改為true。 在下一次提交表單時,一切都將返回false

提前非常感謝您的回答!


多虧了gp_sflover,我找到了解決方案。 我的表單給出的值是字符串,而不是布爾值。

將我填充數組$ data的行替換為:$ data [$ slug] =($ request-> request-> get($ slug)==“ true”)嗎? 真假 ;

您有setInscriptionsOuvertes($etat)方法,該方法在$projet->setInscriptionsOuvertes($data[$slug]);中接受boolean $projet->setInscriptionsOuvertes($data[$slug]); 它似乎用$slug設置了一個string

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM