Skip to content

Commit

Permalink
Merge branch 'tagcrud' of github.com:Charly0475/BlOOG2 into Charly047…
Browse files Browse the repository at this point in the history
…5-tagcrud
  • Loading branch information
WebDevCF2m committed Jul 8, 2024
2 parents 11ee0c8 + 3196092 commit 88d64f6
Show file tree
Hide file tree
Showing 337 changed files with 12,930 additions and 4 deletions.
7 changes: 7 additions & 0 deletions test/Charly/01-begin/01-begin/.gitignore
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

26 changes: 26 additions & 0 deletions test/Charly/01-begin/01-begin/config.php.ini
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";
3 changes: 3 additions & 0 deletions test/Charly/01-begin/01-begin/controller/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Controller


44 changes: 44 additions & 0 deletions test/Charly/01-begin/01-begin/model/Abstract/AbstractMapping.php
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;


}
8 changes: 8 additions & 0 deletions test/Charly/01-begin/01-begin/model/Abstract/README.md
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 test/Charly/01-begin/01-begin/model/Interface/InterfaceManager.php
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;
}
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;
}
9 changes: 9 additions & 0 deletions test/Charly/01-begin/01-begin/model/Interface/README.md
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 test/Charly/01-begin/01-begin/model/Mapping/MappingTag.php
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;
}

}
1 change: 1 addition & 0 deletions test/Charly/01-begin/01-begin/model/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# Model
24 changes: 24 additions & 0 deletions test/Charly/01-begin/01-begin/model/Trait/README.md
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 test/Charly/01-begin/01-begin/model/Trait/TraitSlugify.php
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;
}
*/
}
}
2 changes: 2 additions & 0 deletions test/Charly/01-begin/01-begin/public/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Public

51 changes: 51 additions & 0 deletions test/Charly/01-begin/01-begin/public/index.php
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);
2 changes: 2 additions & 0 deletions test/Charly/01-begin/01-begin/view/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# View

7 changes: 7 additions & 0 deletions test/Charly/01-begin/02-mapping/.gitignore
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

26 changes: 26 additions & 0 deletions test/Charly/01-begin/02-mapping/config.php.ini
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";
3 changes: 3 additions & 0 deletions test/Charly/01-begin/02-mapping/controller/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Controller


40 changes: 40 additions & 0 deletions test/Charly/01-begin/02-mapping/model/Abstract/AbstractMapping.php
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;
}
Loading

0 comments on commit 88d64f6

Please sign in to comment.