Bonjour,

Je cherche à faire évoluer le MVC pour faire une fonction d'ajout. Je sais que dans le modèle de base il y a la fonction save(), je voudrais l'utiliser mais je ne sais pas comment l'appeler.

Par exemple pour tutoriel on a une vue index et view, sur index on fait un appel de "find". Je créé donc une nouvelle vue add_tuto.php, dans mon controller je rajoute une fonction add_tuto dans laquelle je redirige vers cette vue mais aussi dans laquelle je souhaite appeler save(), mais je ne sais pas quoi mettre dedans.

Si quelqu'un a réussi à faire évoluer ce tuto dans ce sens, je suis preneur d'idée :)

Merci

10 réponses


JeaM-Pierre
Auteur
Réponse acceptée

Ok j'ai remplacé par count($_POST)>0 et cela fonctionne.

Merci beaucoup PhiSyX pour ton soutien et ton aide ;)

ça devrait ressembler à ça:

$this->ton_modele->find();

Euh oui pour faire un select on utilise find, mais pour faire le insert il faut utiliser save, sauf que je ne sais pas quoi mettre dans $this->mon_modele->save(???) :)

Hello, il faut mettre un tableau (array) contenant les champs de la table et les valeurs.

Exemple :

$data = array(
    'username' => 'PhiSyX',
    'password' => 'Pwet'
);
$this->model->save($data);

username et password doivent exister dans ta table.
Voilà ^^

T'avais pas savoir l'air de comment appeler ta méthode donc je t'ai montré un exemple. Ensuite comment tu peux ne pas savoir quoi passer en paramètre puisque c'est toi qui code ton code ? oO

Merci à vous deux, rassure-toi Huviel, c'est moi qui me suis mal exprimé :)
Phisyx a parfaitement répondu a ma question, j'ai fait le test cela fonctionne.

Actuellement j'ai mis son bout de code dans la fonction add_new_tuto qui se trouve dans le controller. Dès que je me rend sur la vue add_new_tuto ça insère parfaitement en base.

J'ai rajouté un formulaire basique dans la vue add_new_tuto dans lequel j'ai 2 inputs (pour username et password pour reprendre ton exemple). Deux problèmes s'ouvrent à moi :

  • que dois-je inscrire dans l'action du formulaire ? (<form action="add_new_tuto" ??)
  • dans mon controller, comment récupérer les valeurs de mon form ? ('username' => '??')

Navré de poser des questions de ce type, cela peut vous paraître facile. Encore merci pour vos précédentes réponses.

Hello,
1) La page courante ? :p
2) Si tu as rajouté ceci dans ton constructeur ( fnc __construct() )

if (isset($_POST)) {
    $this->data = $_POST;
}

tu peux récupérer les données depuis $this->data'username'], $this->data'password'] etc... :)

Voilà ^^

Alors dans mon constructeur non je n'avais pas rajouté la fonction __construct, désormais je rajoute cela en tout début de class :

public function __construct(){
    if (isset($_POST)) {  
        $this->data = $_POST;  
    }
}

mais cela doit perturber le comportement du controller car lors de mon passage sur la vue principal tutoriels (soit la vue index), j'ai ce message :

  • Notice: Undefined property: tutoriels::$Tutoriel in /Applications/MAMP/(....)/controllers/tutoriels.php on line 13
  • Fatal error: Call to a member function getLast() on a non-object in /Applications/MAMP/(....)/controllers/tutoriels.php on line 13

Si je retire la fonction __construct la vue index s'affiche correctement

Oui dans le controller tutoriels mais dans le controller par défault, il y est ? :p ( core/controller.php )

Ah oui en effet il s'y trouve bien donc pas besoin de le refaire dans le controller tutoriels ^^, merci beaucoup. J'y suis "presque" :p

En effet quand je suis sur ma vue index, j'ai un lien href qui me redirige vers la vue add_new_tutoriel dans lequel se trouve le formulaire. Sauf que dès que je clique dessus ça active l'action du controller. Voici la fonction du controller (j'ai gardé tes exemples, c'est volontaire de laisser username et password donc ^^) :

function add_new_tutoriel(){
    if(isset($_POST)){
    $data = array(  
        'id' => '',  
        'username' => $this->data'username'],
        'password' => $this->data'password']
        );
    $this->Tutoriel->save($data);
    }
    $this->render('add_new_tutoriel');
}

Le problème est que dès que je clique sur le lien href ça m'ajoute automatiquement une donnée vide en base, mais ça me dit aussi un "Notice: Undefined index: username" alors que je fait bel et bien le test de savoir si un post est effectué.