forked from WebDevCF2m2023/BlOOG2
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'tagcrud' of github.com:Charly0475/BlOOG2 into Charly047…
…5-tagcrud
- Loading branch information
Showing
337 changed files
with
12,930 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
# fichers non envoyés | ||
config.php | ||
# vendor contient les libairies externes en php | ||
/vendor | ||
# PHPStorm | ||
.idea | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
<?php | ||
|
||
// paramètres de connexions | ||
const DB_HOST = "localhost"; | ||
const DB_LOGIN = "******"; | ||
const DB_PWD = "******"; | ||
const DB_NAME = "******"; | ||
const DB_PORT = 3306; | ||
const DB_CHARSET = "utf8mb4"; | ||
|
||
// paramètres supplémentaires pour PDO | ||
const DB_TYPE = "mysql"; // valable pour MySQL et/ou MariaDB | ||
|
||
/* | ||
Mode d'environnement | ||
développement => dev | ||
production => prod | ||
test => test | ||
*/ | ||
const ENV = "dev"; | ||
// chemin absolu du projet | ||
const PROJECT_DIRECTORY = __DIR__ ; | ||
// mail pour webdev-cf2m.be | ||
const MAIL_SERVER = "***@***.be"; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
# Controller | ||
|
||
|
44 changes: 44 additions & 0 deletions
44
test/Charly/01-begin/01-begin/model/Abstract/AbstractMapping.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
<?php | ||
|
||
// Espace de nom (isolation du code) | ||
namespace model\Abstract; | ||
|
||
// Classe abstraite qui ne peut être instanciée. | ||
// Elle est la base de tous les mappings de tables | ||
abstract class AbstractMapping | ||
{ | ||
// constructeur - Appelé lors de l'instanciation | ||
public function __construct(array $tab) | ||
{ | ||
// tentative d'hydration des données des classes enfants | ||
$this->hydrate($tab); | ||
} | ||
|
||
// création de notre hydratation, en partant d'un tableau associatif et de ses clefs, | ||
// on va régénérer le nom des setters existants dans les classes enfants | ||
protected function hydrate(array $assoc): void | ||
{ | ||
// tant qu'on a des éléments dans le tableau | ||
foreach ($assoc as $key => $value) { | ||
|
||
// création du nom d'un setter (méthode publique de modification) | ||
$tab = explode("_", $key); | ||
$majuscule = array_map('ucfirst',$tab); | ||
$newNameCamelCase = implode($majuscule); | ||
$methodeName = "set" . $newNameCamelCase; | ||
|
||
// si la méthode existe | ||
if (method_exists($this, $methodeName)) { | ||
// on hydrate le paramètre avec la valeur | ||
$this->$methodeName($value); | ||
}else{ | ||
echo "$methodeName n'est pas un setter valide<br>"; | ||
} | ||
} | ||
} | ||
|
||
// Méthode abstraite à déclarer dans tous les enfants de AbstractMapping | ||
abstract public function __toString():string; | ||
|
||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
# Abstract Model | ||
|
||
|
||
Les modèles abstraits sont des classes de base pour tous les modèles. Ils fournissent une interface commune à tous les modèles à implémenter. | ||
|
||
On ne peut pas instancier un modèle abstrait. Les classes enfants, appelées par `extends`, doivent implémenter les méthodes abstraites. | ||
|
||
Les classes enfants peuvent hériter, donc surcharger ou supprimer, les méthodes non abstraites, les propriétés et les constantes. |
16 changes: 16 additions & 0 deletions
16
test/Charly/01-begin/01-begin/model/Interface/InterfaceManager.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
<?php | ||
|
||
namespace model\Interface; | ||
|
||
use PDO; | ||
use Exception; | ||
|
||
interface InterfaceManager | ||
{ | ||
public function __construct(PDO $pdo); | ||
public function selectAll(): array; | ||
public function selectOneById(int $id): object; | ||
public function insert(object $object): void; | ||
public function update(object $object): void; | ||
public function delete(int $id): void; | ||
} |
8 changes: 8 additions & 0 deletions
8
test/Charly/01-begin/01-begin/model/Interface/InterfaceSlugManager.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
<?php | ||
|
||
namespace model\Interface; | ||
|
||
interface InterfaceSlugManager | ||
{ | ||
public function selectOneBySlug(string $slug): object; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
# Interface Model | ||
|
||
|
||
Les modèles d'interface obligent les classes qui l'implémentent via `implements` à définir des méthodes spécifiques. | ||
|
||
On ne peut pas instancier un modèle d'interface. Les classes enfants doivent implémenter les méthodes abstraites. | ||
|
||
Une classe peut implémenter plusieurs interfaces. Les interfaces peuvent hériter d'autres interfaces. | ||
|
49 changes: 49 additions & 0 deletions
49
test/Charly/01-begin/01-begin/model/Mapping/MappingTag.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
<?php | ||
// création de l'espace de nom (suivant le nom des dossiers) | ||
// pour que notre autoload perso soit fonctionnel | ||
namespace model\Mapping; | ||
|
||
// on veut utiliser AbstractMapping, donc on peut utiliser | ||
// use suivi du chemin vers la classe (namespace) | ||
|
||
use Exception; | ||
// appel de la classe abstraite | ||
use model\Abstract\AbstractMapping; | ||
// appel du trait | ||
use model\Trait\TraitSlugify; | ||
|
||
|
||
|
||
class MappingTag extends AbstractMapping{ | ||
// propriétées | ||
protected ?int $tag_id; | ||
protected ?string $tag_slug; | ||
|
||
// création des méthodes de type setter | ||
// appelées lors de la création d'un objet | ||
// via l'hydratation | ||
public function setTagId(int $id){ | ||
if($id<1) throw new Exception("Id du tag non valide"); | ||
$this->tag_id = $id; | ||
} | ||
|
||
// Appel du trait DANS la classe où on souhaite | ||
// l'utiliser (le chemin complet est en haut du fichier) | ||
use TraitSlugify; | ||
|
||
public function setTagSlug(string $slug) | ||
{ | ||
// utilisation de slugify() qui vient du Trait | ||
// model\Trait\TraitSlugify; | ||
$this->tag_slug = $this->slugify($slug); | ||
} | ||
|
||
// on doit implémenter la classe abstraite du parent | ||
// __toString est une méthode magique qui, si on veut | ||
// afficher l'instance comme une chaîne de caractère | ||
public function __toString(): string | ||
{ | ||
return "Cette instance est créée par ".self::class; | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
# Model |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
# Trait Model | ||
|
||
Les traits sont des éléments de code réutilisables. Ils permettent d'ajouter des méthodes à une classe sans avoir à l'hériter. Ils sont très utiles pour ajouter des fonctionnalités à une classe sans avoir à l'hériter. Ils permettent d'éviter les problèmes de l'héritage multiple impossible en PHP sans passer par plusieurs parents. | ||
|
||
En effet, un seul parent est possible en PHP (un extends). Par contre, on peut utiliser plusieurs traits dans une même classe. | ||
|
||
```php | ||
trait A { | ||
public function a() { | ||
echo "a"; | ||
} | ||
} | ||
trait B { | ||
public function b() { | ||
echo "b"; | ||
} | ||
} | ||
class Test { | ||
use A, B; | ||
} | ||
$test = new Test(); | ||
$test->a(); // affiche "a" | ||
$test->b(); // affiche "b" | ||
``` |
40 changes: 40 additions & 0 deletions
40
test/Charly/01-begin/01-begin/model/Trait/TraitSlugify.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
<?php | ||
|
||
namespace model\Trait; | ||
|
||
trait TraitSlugify | ||
{ | ||
public function slugify(string $s): string | ||
{ | ||
// retrait des balises html | ||
$text = strip_tags($s); | ||
// On remplace les caractères accentués par des '-' | ||
$text = preg_replace('~[^\pL\d]+~u', '-', $text); | ||
// On choisit la locale en utf8 | ||
setlocale(LC_ALL, 'en_US.utf8'); | ||
// On remplace les caractères accentués restants | ||
$text = iconv('utf-8', 'us-ascii//TRANSLIT', $text); | ||
// On efface les caractères non alphanumériques | ||
$text = preg_replace('~[^-\w]+~', '', $text); | ||
// on retire les espaces | ||
$text = trim($text, '-'); | ||
// on retire les caractères '-' en double | ||
$text = preg_replace('~-+~', '-', $text); | ||
// on met tout en minuscule | ||
$text = strtolower($text); | ||
// si le texte est vide | ||
if (empty($text)) { | ||
return 'n-a'; | ||
} | ||
// résultat | ||
return $text; | ||
|
||
/* | ||
* Autre code possible | ||
{ | ||
$text = strtolower(trim(preg_replace(['~[^\pL\d]+~u', '~[^-\w]+~', '~-+~'], ['-', '', '-'], strip_tags($s)), '-')); | ||
return empty($text) ? 'n-a' : $text; | ||
} | ||
*/ | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
# Public | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
<?php | ||
|
||
// session | ||
session_start(); | ||
|
||
// Appel de la config | ||
require_once "../config.php"; | ||
|
||
// our autoload | ||
spl_autoload_register(function ($class) { | ||
$class = str_replace('\\', '/', $class); | ||
require PROJECT_DIRECTORY.'/' .$class . '.php'; | ||
}); | ||
|
||
echo PROJECT_DIRECTORY."<br>"; | ||
|
||
// on peut utiliser l'écriture longue pour appeler une classe | ||
// via l'autoload en utilisant son namespace | ||
$tag1 = new model\Mapping\MappingTag([ | ||
'tag_id' => 1, | ||
'tag_slug' => "php-8", | ||
"Je m'amuse beaucoup !"=>"14", | ||
"Nimporte_Quoi"=>"yep", | ||
]); | ||
|
||
// manière courte l'alias n'est créé que si on a 2 classes | ||
// qui portent le même nom | ||
use model\Mapping\MappingTag as lulu; | ||
|
||
$tag2 = new lulu([ | ||
'tag_id' => 8, | ||
'tag_slug' => "php-8.4", | ||
]); | ||
|
||
use model\Mapping\MappingTag; | ||
|
||
$tag3 = new MappingTag([ | ||
'tag_id' => 13, | ||
'tag_slug' => "php-9", | ||
'Argggg_ho_tempo' => 164862, | ||
]); | ||
|
||
// on voudrait un 'vrai' slug | ||
$tag4 = new MappingTag([ | ||
'tag_id'=>15, | ||
'tag_slug'=> "J'aimerais que ceci soit un slug ù$^*ùµùm^m, non?|ééç!è", | ||
]); | ||
|
||
echo $tag4."<br>"; | ||
|
||
var_dump($tag1,$tag2,$tag3,$tag4); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
# View | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
# fichers non envoyés | ||
config.php | ||
# vendor contient les libairies externes en php | ||
/vendor | ||
# PHPStorm | ||
.idea | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
<?php | ||
|
||
// paramètres de connexions | ||
const DB_HOST = "localhost"; | ||
const DB_LOGIN = "******"; | ||
const DB_PWD = "******"; | ||
const DB_NAME = "******"; | ||
const DB_PORT = 3306; | ||
const DB_CHARSET = "utf8mb4"; | ||
|
||
// paramètres supplémentaires pour PDO | ||
const DB_TYPE = "mysql"; // valable pour MySQL et/ou MariaDB | ||
|
||
/* | ||
Mode d'environnement | ||
développement => dev | ||
production => prod | ||
test => test | ||
*/ | ||
const ENV = "dev"; | ||
// chemin absolu du projet | ||
const PROJECT_DIRECTORY = __DIR__ ; | ||
// mail pour webdev-cf2m.be | ||
const MAIL_SERVER = "***@***.be"; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
# Controller | ||
|
||
|
40 changes: 40 additions & 0 deletions
40
test/Charly/01-begin/02-mapping/model/Abstract/AbstractMapping.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
<?php | ||
|
||
// Espace de nom (isolation du code) | ||
namespace model\Abstract; | ||
|
||
// Classe abstrait qui ne peut être instanciée | ||
// Elle est la base de tous les mappings de tables | ||
abstract class AbstractMapping | ||
{ | ||
// constructeur - Appelé lors de l'instanciation | ||
public function __construct(array $tab) | ||
{ | ||
// tentative d'hydration des données des classes enfants | ||
$this->hydrate($tab); | ||
} | ||
|
||
// création de notre hydratation, en partant d'un tableau associatif et de ses clefs, | ||
// on va régénérer le nom des setters existants dans les classes enfants | ||
protected function hydrate(array $assoc): void | ||
{ | ||
// tant qu'on a des éléments dans le tableau | ||
foreach ($assoc as $key => $value) { | ||
|
||
// création du nom d'un setter (méthode publique de modification) | ||
$tab = explode("_", $key); | ||
$majuscule = array_map('ucfirst',$tab); | ||
$newNameCamelCase = implode($majuscule); | ||
$methodeName = "set" . $newNameCamelCase; | ||
|
||
// si la méthode existe | ||
if (method_exists($this, $methodeName)) { | ||
// on hydrate le paramètre avec la valeur | ||
$this->$methodeName($value); | ||
} | ||
} | ||
} | ||
|
||
// Méthode abstraite à déclarer dans tous les enfants de AbstractMapping | ||
abstract public function __toString():string; | ||
} |
Oops, something went wrong.