Bonsoir,
Depuis quelques temps j'ai décidé de vraiment me mettre à la POO et à créer mon propre petit "framework" pour mon usage personnel. Au départ je voulais partir sur Laravel, mais hébergeant mes sites sur un hébergeur mutualisé, importer Laravel sur un mutualisé est assez "compliqué" et pénible étant donné qu'on ne peut pas utiliser la console et composer. Je suis donc parti de 0. (Cependant si vous avez des méthodes simples et efficaces je suis 100% preneur)
J'ai donc quelques questions d'organisation :
Je pensais à une organisation de ce type :
class Site
{
// Instance de pdo
public $pdo;
// Instance de la configuration
public $cfg;
// Instance du template
public $tpl;
// Instance du protocole http
public $http;
// Instances
public $sessions;
/*
* On instancie toutes les classes
/
public function __construct()
{
$this->pdo = new Db();
$this->cfg = new Config();
$this->tpl = new Talus_TPL();
$this->http = new Http();
$this->sessions = new Sessions();
}
}
Et ensuite lier toutes mes classes avec un extends, mais je ne suis pas sûr que ça soit la meilleure méthode et un soucis technique vient me prendre. Est ce que je peux appeler une autre classe mettons la classe base de donnée dans la classe modèles via Site et si oui de quelle manière ?
Je vous remercie par avance pour vos conseils et avis éclairés
Salut, j'ai l'impression que tu veux apprendre donc je vais pas te donner des réponses toutes faites avec du code mais je vais te donner quelque conseil et une direction à chercher.
Regarde du côté des frameworks déjà crées, ça peut être indigeste pour un débutant, mais dès que tu comprendra comment ça fonctionne, tu verra la réponse au 3/4 de tes questions.
Exemple:
https://github.com/symfony/symfony
https://github.com/cakephp/cakephp
https://github.com/laravel/laravel
Design Pattern
Tuto de Grafikart (copie pas mais inspire toi)
Vidéo conseillé:
http://www.grafikart.fr/tutoriels/php/developper-site-jour1-base-donnees-183 + la suite
http://www.grafikart.fr/tutoriels/php/mvc-model-vue-controller-php-132
Ton idée de base peut être pas mal. Et si tu as un problème essaye de savoir pourquoi il y a un problème. Et n'hésite pas à aller sur l'irc de #grafikart ou poser une question sur le forum
Je te remercie mais je me suis déjà pas mal renseigné sur tout ça :)
Je ne demande pas du code, juste savoir si ma démarche est bonne et si je ne pars pas dans le faux avec mon code. Par exemple est ce que je dois lier ma classe Model à la classe Site (avec un extends) et si oui est ce que je peux réutiliser l'object db ($pdo) dans cette classe model ?
J'ai qu'une réponse à te donner.
Essaye !!!! Si ça fonctionne pas, tant pis, si ça fonctionne, tant mieux.
https://www.youtube.com/watch?v=BQ4yd2W50No
Dommage qu'il n'y a pas de balise spoiler mais je vais te donner une image qui va te faire réfléchir
J'ai modifié légèrement l'image fourni par la doc cakephp. A toi de t'en inspiré
Original : http://book.cakephp.org/3.0/en/intro.html#cakephp-request-cycle
Rebonsoir
J'ai effectivement testé et j'ai décidé de partir sur Slim Framework pour gérer mes routes en suivant le tutoriel sur Slim Framework posté par grafikart. Je me retrouve en revanche confronté à un soucis. J'ai décidé de créer une classe modèle bien entendu pour gérer mes interactions avec la base de donnée. Et je me retrouve avec cette erreur :
Slim Application Error
The application could not run because of the following error:
Details
Type: ErrorException
Code: 2
Message: Missing argument 1 for Model::__construct(), called in /Users/Alexandre/Sites/alexandre/libs/autoload.php on line 36 and defined
File: /Users/Alexandre/Sites/alexandre/libs/class/model.class.php
Line: 20
Voici ma classe Model (en cours de réalisation mais au moment du premier test, ça plante...):
class Model
{
// Slim Framework
protected $app;
public function __construct($app) // ligne 20 bien sûr
{
$this->app = $app;
}
public function delete($table, $field, $id)
{
$this->app->pdo->prepare("DELETE FROM " . PREFIX . $table . " WHERE $field=:id");
$this->app->pdo->execute(array('id' => intval($id)));
}
}
Le routeur donc :
class Router
{
// Slim Framework
private $app;
public function __construct($app)
{
$this->app = $app;
}
public function call($method, $url, $action)
{
return $this->app->$method($url, function() use ($action)
{
$action = explode('@', $action);
$controller_name = $action[0] . 'Controller';
$method = $action[1];
$controller = load_class($controller_name, $this->app);
call_user_func_array(array($controller, $method), func_get_args());
});
}
public function get($url, $action)
{
return $this->call('get', $url, $action);
}
public function post($url, $action)
{
return $this->call('post', $url, $action);
}
}
Et la classe controller :
class Controller
{
// Slim Application
protected $app;
protected $model;
public function __construct($app)
{
$this->app = $app;
}
}
Je ne comprends pas mon erreur, je ne vois pas en quoi il me manque un argument dans mon constructeur :/, alors j'ai peut être raté une étape mais après de nombreuses recherches, je n'avance toujours pas :/
Si quelqu'un a la réponse ou une explication je suis preneur :)