Bonjour,

Ayant d'afficher les données de ma basse de donnée Mysql dans un formulaire pour les administrer et le modifier en Back-end. Je récupère un objet. que je passe dans un BoostrapForm. Et rien ne s'affiche... J'ai tenté foreach, de même. Voici mon code

<?php
use Core\HTML\BootstrapForm;
use App\App;
$post = App::getInstance()->getTable('Post')->find($_GET['id']);
$form = new BootstrapForm($post);
var_dump($post);
var_dump($form);
?>

    <form method="post">
        <?= $form-> input('title', 'Titre de l\'article'); ?>
        <?= $form-> input('content', 'Contenu', ['type' => 'textarea']); ?>
        <button class="btn btn-primary">Sauvegarder</button>
    </form>

voici le resultat :

var_dump($post);

C:\wamp64\www\BloG\pages\admin\posts\edit.php:6:
array (size=1)
  0 => 
    object(App\Entity\PostEntity)[8]
      public 'title' => string 'MON_TITRE' (length=9)
      public 'content' => string '  Contenu de l'article..blablablablablablablablablablabla...
      public 'date' => string '2016-07-27 16:51:12' (length=19)
      public 'id' => string '1' (length=1)
      public 'categories' => string 'Picine' (length=6)

var_dump($form);

C:\wamp64\www\BloG\pages\admin\posts\edit.php:7:
object(Core\HTML\BootstrapForm)[5]
  private 'data' (Core\HTML\Form) => 
    array (size=1)
      0 => 
        object(App\Entity\PostEntity)[8]
          public 'title' => string 'MON_TITRE' (length=9)
          public 'content' => string '  Contenu de l'article...blablablablablablablablablabla...
          public 'date' => string '2016-07-27 16:51:12' (length=19)
          public 'id' => string '1' (length=1)
          public 'categories' => string 'Picine' (length=6)
  public 'surround' => string 'p' (length=1)

A l'écran :

Titre de l'article

==> formulaire vide <==

Contenu

==> formulaire vide <==

Enfin voici le fichier BootstrapForm :

<?php
namespace Core\HTML;
use Core\HTML\Form;
class BootstrapForm extends Form{

    protected function surround($html){
            return "<div class=\"form-group\">{$html}</div>";
    }

    public function input($name,$label,$options = []){
        var_dump ($name);
        $type = isset($options['type']) ? $options['type'] : 'text';
        $label = '<label>' . $label . '</label>';
        if ($type === 'textarea'){
            $input = '<textarea name="'. $name .'" class="form-control">' . $this->getValue($name) . '</textarea>';
        } else {
            $input = '<input type="' . $type . '" name="' . $name . '" value="' . $this->getValue($name) . '" class="form-control">';
        }
        return $this->surround($label . $input);
    }

    public function submit(){

        return $this->surround('<button type="submit" class="btn btn-primary">Envoyer</button>');
    }
}
?> 

Et le Form

<?php
namespace Core\HTML;
class Form{
    private $data;
    public $surround = 'p';
    public function __construct($data = array()){
        $this->data = $data;
    }
    protected function surround($html){
        return "<{$this->surround}>{$html}</{$this->surround}>";
    }
    protected function getValue($index){
        if(is_object($this->data)){
            return ($this->data->$index);
        }
        return isset($this->data[$index]) ? $this->data[$index] : null;
    }
    public function input($name, $label, $options = []){
        var_dump($name);
        $type = isset($options['type']) ? $options['type'] : 'text' ;
        return $this->surround(
            '<input type="'.$type.'"name="'.$name.'"value="'.$this->getValue($name).'">'
        );
    }

    public function submit(){
        return $this->surround('<button type="submit">Envoyer</button>');
    }
}
?>

Preneur de toute piste de réflexion, je ne sais plus trop où chercher. Ayant eu le même problème dans un autre exercice, un foreach avait réglé le problème dans ce cas précis, non : dans mon $form, le dernier élément n'ai pas un objet donc ça ne marche pas. Les vidéos ne montrent aucunes de ces problèmatiques, mais peut-être y-a-til eu une mise à jour depuis, ou bien, ai-je loupé une étape dans une classe...(très probable ^^) ? Où dois-je chercher, les var-dump() n'avance pas mon chmilblic?
Merci d'avance!

4 réponses


LocknesS
Auteur

Les erreurs sont bien activées. le HTML de ma page est le suivant :

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
    <meta name="description" content="">
    <meta name="author" content="">
    <link rel="icon" href="../../favicon.ico">

    <title>Mon super site</title>

    <!-- Bootstrap core CSS -->
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">

   </head>

  <body>

    <nav class="navbar navbar-inverse navbar-fixed-top">
      <div class="container">
        <div class="navbar-header">
         <a class="navbar-brand" href="/BloG/public/index.php">Mon SIte kiProut!</a>
        </div>
      </div>
    </nav>

    <div class="container">

      <div class="starter-template" style="padding-top: 100px">

    <form method="post">
        <div class="form-group"><label>Titre de l'article</label><input type="text" name="title" value="" class="form-control"></div>        <div class="form-group"><label>Contenu</label><textarea name="content" class="form-control"></textarea></div>        <button class="btn btn-primary">Sauvegarder</button>
    </form>
      </div>

    </div><!-- /.container -->

  </body>
</html>
LocknesS
Auteur

Maleureusement non rien ne se passe... Je regarde du côté de ce getValue mais il ne veut pas se laisser faire!

Bonsoir, il ne faudrait pas utiliser le fonction "findfirst" puisque que nous sencé avoir seulement un objet ?

LocknesS
Auteur

Merci! il faulait bien un récupérer le tableau et j'ai du rajouter [0] à mon code. Sans rien faire de particulier la commande me charge bien les article demander. Je charge un objet possédant un seul article donc c'est parfait! C'était la même problématique à l'endroit où j'ai solutionné par le foreach que j'ai finalement enlevé. En tout cas merci! Je garde le 'findfirt' sous le coude ;).