Bonjour,
Avec mes quelques notions de PHP j'ai voulus créer une applications de referencement qui soit relativement scalable. J'ai voulus utiliser les notions de POO ainsi que le design pattern MVC qui sont pas forcement simple a comprendre dans la théorie !
Voici le code de mon fichier index.php
Ainsi que le fichier ou je definit constantes et quelques fonctions
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96 <?php require("def.php"); require("model/beers.php"); class index_controller extends Controller { var $_beers; public function __construct() { $this->_beers = new beers(); parent::__construct(); } /* ** Assume that default action consist of a listing of all avaible beers */ public function defaultAction() { $title = "List of beers"; $beers = $this->_beers->get_all(); $this->render('index', compact('title', 'beers')); } /* ** Insert an input into database */ public function add() { if(isset($_POST["add"])) { $name = addslashes($_POST["name"]); $this->_beers->insert($name); //header("Location: " . ROOT . "/index.php"); header("Location: " . ROOT); } else { $title = "Insert an input"; $this->render('add', compact('title')); } } // Display a preformated form and allow user to modify it public function modify() { $id = $_GET["id"]; if(isset($_POST["modify"])) { $name = addslashes($_POST["name"]); $this->_beers->modify($id, $name); header("Location: " . ROOT); } else { $title = "Modify an input"; $name = $this->_beers->get_name($id); $this->render("modify", compact("title", "name")); } } public function delete() { $id = $_GET["id"]; if(isset($_POST["delete"])) { if($_POST["delete"] == "yes") { $this->_beers->delete($id); } header("Location: " . ROOT); } else { $title = "Delete an input"; $name = $this->_beers->get_name($id); $this->render("delete", compact("title", "name")); } } } new index_controller(); ?>
Je me suis enfait lancer a partir d'un squelette déjà commencé que j'ai repris et un peu modifier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76 <?php abstract class Controller { private function root() { return(dirname(__FILE__)); } /* ** Set the global constant "ROOT" as VH document root */ protected function set_root_web_app() { preg_match('@/[^/]+@', $_SERVER["PHP_SELF"], $matches); if(!defined("ROOT")) { //define("ROOT", $_SERVER["DOCUMENT_ROOT"]); define("ROOT", $matches[0]); } } /* ** Display the given model */ protected function render($file_name, $variables_array = null) { if($variables_array) { extract($variables_array); } include("layouts/header.php"); //require(ROOT . '/views/' . $file_name . '.view.php'); //include(ROOT . "/views/" . $file_name . ".view.php"); include($this->root() . "/views/" . $file_name . ".view.php"); include("layouts/footer.php"); } abstract function defaultAction(); private function execute_action() { // Check if an action is given in the script name // ie index.php/add execute the add action $action = substr(strrchr($_SERVER["PHP_SELF"], "/"), 1); //echo $action; if(strpos($action, ".php")) { // Found .php extension ie not action $this->defaultAction(); } else { $this->$action(); } } // Appel à un contrôleur avec une action qui n'existe pas function __call($name, $arguments){ echo "<b>Erreur : </b> L'action $name n'est pas définie"; } public function __construct() { $this->set_root_web_app(); $this->execute_action(); } } ?>
Mon premier problème, c'est lorsque je passe aux pages d'ajout, de modification ou de suppression je perd le style de ma page. Je pense que c'est le fait que mes fichiers de vues ne se trouve pas a la racine. Le problème doit donc se trouver dans la fonction render mais comment faire pour ne pas recharger a chaque fois les header/footers ?
Est-ce que l'utilisation des instructions header est une bonne technique de programmation ? Je trouve cela pas forcement très propre de modifier les header http ?
Enfin dans mes vues j'aimerais faire un lien de retour vers la page d'acceuil
Néanmoins ce lien donne comme résultat
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <h2><?php echo $title; ?></h2> <form name="insert_beer" action="index.php/add" method="post"> <p><label>Name</label> : <input type="text" name="name"/></p> <input type="submit" name="add" value="add"/> <input type="reset" value="reset"/> </form> <a href="<?php echo ROOT;?>/index.html">homepage</a>
Dans une dernier temps si vous avez des critiques sur cette application je suis prenneur !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2Erreur : L'action index.html n'est pas définie
Merci d'avance
Ps: j'ajoute un dump du projet
Partager